最短路
来源:互联网 发布:淘宝买家秀的福利网盘 编辑:程序博客网 时间:2024/06/07 02:45
C - 最短路
Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u
Submit
Status
Description
在每年的校赛里,所有进入决赛的同学都会获得一件很漂亮的t-shirt。但是每当我们的工作人员把上百件的衣服从商店运回到赛场的时候,却是非常累的!所以现在他们想要寻找最短的从商店到赛场的路线,你可以帮助他们吗?
Input
输入包括多组数据。每组数据第一行是两个整数N、M(N<=100,M<=10000),N表示成都的大街上有几个路口,标号为1的路口是商店所在地,标号为N的路口是赛场所在地,M则表示在成都有几条路。N=M=0表示输入结束。接下来M行,每行包括3个整数A,B,C(1<=A,B<=N,1<=C<=1000),表示在路口A与路口B之间有一条路,我们的工作人员需要C分钟的时间走过这条路。
输入保证至少存在1条商店到赛场的路线。
Output
对于每组输入,输出一行,表示工作人员从商店走到赛场的最短时间
Sample Input
2 1
1 2 3
3 3
1 2 5
2 3 5
3 1 2
0 0
Sample Output
3
2
#include <cstdio>#include <cstring>using namespace std;const int mmax = 110;const int INF = 0x3f3f3f3f; int N, M;int map[mmax][mmax], dis[mmax], vis[mmax];void Dijkstra (){ int k, i, j; for ( i = 1;i <= N; i++) { dis[i] = map[1][i]; vis[i] = 0; } dis[1] = 0; vis[1] = 1; for ( i = 1; i <= N; i++) { int temp = INF; for ( j = 1; j <= N; j++) { if (!vis[j] && dis[j] < temp) { k = j; temp = dis[j]; } } vis[k] = 1; for ( j = 1; j <= N; j++) { if (!vis[j] && dis[k] + map[k][j] < dis[j]) { dis[j] = dis[k] + map[k][j]; } } }}int main (){ while (scanf ("%d%d", &N, &M) != EOF) { memset (map, INF, sizeof(map)); if (N == 0 && M == 0) break; int a, b, c; for (int i =0 ; i < M; i++) { scanf ("%d%d%d", &a, &b, &c); if (c < map[a][b]) { map[a][b] = c; map[b][a] = c; } } Dijkstra (); printf ("%d\n", dis[N]); } return 0;}
0 0
- 最短路 & 次短路
- 最短路
- 最短路
- 最短路
- 最短路
- 最短路
- 最短路
- 最短路
- 最短路
- 最短路
- 最短路
- 最短路
- 最短路
- 最短路
- 最短路
- 最短路
- 最短路
- 最短路
- 初学者如何查阅自然语言处理(NLP)领域学术资料
- Android学习笔记之自定义控件--标题栏
- android-Date.class
- 第7周-项目1-实现复数类中的运算符重载-类的友元函数
- Djkstra
- 最短路
- 第7周-项目1-完整实现复数类中的运算符重载-扩展+、-、*、/运算符的功能
- 安装Ubuntu 16.04后要做的事
- 从n个人中选择k个人的选法
- 一个人的旅行
- 数据挖掘、机器学习、自然语言处理
- 开通博客
- 穿越人海——改变
- C#中数组的三种访问方式