hdu 2544 最短路
来源:互联网 发布:网页游戏优化器 编辑:程序博客网 时间:2024/06/16 18:29
本题链接:点击打开链接
本题大意:
输入n和m,表示有n个点,有m行输入,每行输入两个点和一个距离作为权值,标号1为起点,n为终点。
解题思路:
此题实际是求两点间最短路径问题,求最短路径的一个算法dijkstra算法(迪科斯彻算法)。
具体请参考代码:
#include<stdio.h>#include<string.h>#include<algorithm>#define INF 0xffffffusing namespace std;int map[110][110];//存放两点间距离 int mark[110];//标记使用过的点 int dis[110];//存放各点到起点的最短距离 int n,m;void dijkstra(int s)//迪科斯彻算法{memset(mark,0,sizeof(mark));for(int i=1;i<=n;i++) dis[i]=INF;//将各点距离初始化为较大的数 dis[s]=0;//起点到起点的距离为0 for(int i=1;i<=n;i++)//对各点进行查找 {int vir,min=INF;for(int j=1;j<=n;j++)//找出距起点最近的点 {if(!mark[j]&&dis[j]<=min){min=dis[j];vir=j;}}if(min==INF)break;mark[vir]=1;//将已找到的点标记 for(int k=1;k<=n;k++)//更新各点到起点集合的距离 if(!mark[k]&&dis[k]>map[vir][k]+dis[vir])dis[k]=map[vir][k]+dis[vir];}}int main(){while(scanf("%d%d",&n,&m),n&&m){for(int i=1;i<=n;i++)for(int j=1;j<=n;j++){map[i][j]=INF;//将各点的距离初始化为无穷大 }int x,y,d;for(int i=1;i<=m;i++){scanf("%d%d%d",&x,&y,&d);if(map[x][y]>d)//若有重复,取距离短的 {map[x][y]=d;map[y][x]=d;//无向时,来与往距离相等 }}dijkstra(1);//求以1为起点的迪科斯彻算法 printf("%d\n",dis[n]);//输出终点与起点间最短距离 }return 0;}
0 0
- 最短路 2544hdu
- HDU 2544 最短路
- HDU-2544 最短路
- Hdu-2544 最短路
- HDU 2544 最短路
- hdu 2544 最短路
- HDU 2544 ( 最短路 )
- hdu 2544 最短路
- HDU 2544 最短路
- hdu 2544 最短路
- hdu 2544 最短路
- HDU 2544 最短路
- hdu 2544 最短路
- HDU 2544 最短路
- hdu 2544 最短路
- HDU 2544 最短路
- hdu 2544 最短路
- hdu 2544 最短路
- 单元测试介绍
- BZOJ 1602 [Usaco2008 Oct]牧场行走 dfs
- 算法竞赛入门经典:第六章 数据结构基础 6.4测试
- 塔奇克马的成长
- 浅谈Java反射机制
- hdu 2544 最短路
- 算法竞赛入门经典:第六章 数据结构基础 6.5小球下落
- Java插入排序、冒泡排序、选择排序、快速排序、shell排序(一)
- http代理和socket代理
- 1024. Palindromic Number (25)
- POJ 2318 TOYS(点与凸多边形的位置关系)
- caffe卷积层代码阅读笔记
- 算法竞赛入门经典:第六章 数据结构基础 6.6层次遍历
- POJ3281 Dining 求最大流