设为首页 加入收藏

TOP

HDU2544 最短路 Bellman-Ford实现
2015-07-20 17:12:51 来源: 作者: 【 】 浏览:2
Tags:HDU2544 短路 Bellman-Ford 实现

Problem 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

解题思路

无向图求最短路,Bellman-Ford可以把边扩展成2*e个,变成”有向图”求解。

代码

#include 
   
     const int max_v = 110; const int max_e = 10010; const int INF = 1000000000; int e,v; struct edge { int from,to,cost; }; int d[max_v]; edge eg[max_e*2]; int main() { while(scanf("%d%d",&v,&e) && v) { //边扩展到1-2e范围 for(int i = 0 ; i < max_v ; i ++) d[i] = INF; for(int i = 1 ; i <= e ; i ++) { scanf("%d%d%d",&eg[i].from,&eg[i].to,&eg[i].cost); eg[i+e].from = eg[i].to; eg[i+e].to = eg[i].from; eg[i+e].cost = eg[i].cost; } d[1] = 0; while(true) { bool flag = false; for(int i = 1 ; i <= 2*e ; i ++) { if(d[eg[i].from] != INF && d[eg[i].from]+eg[i].cost < d[eg[i].to]) { d[eg[i].to] = d[eg[i].from]+eg[i].cost; flag = true; } } if(!flag) break; } printf("%d\n",d[v]); } return 0; } 
   
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇HDU 3974 线段树(将树映射到区间.. 下一篇C/C++预编译指令

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·有没有哪些高效的c++ (2025-12-27 08:20:57)
·Socket 编程时 Accep (2025-12-27 08:20:54)
·计算机网络知识点总 (2025-12-27 08:20:52)
·一篇说人话的文章, (2025-12-27 07:50:09)
·Python Web框架哪家 (2025-12-27 07:50:06)