hdu 1874 畅通工程序 解题报告
2013-12-16 21:33
218 查看
畅通工程续
Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 22095 Accepted Submission(s): 7699
[align=left]Problem Description[/align]
某省自从实行了很多年的畅通工程计划后,终于修建了很多路。不过路多了也不好,每次要从一个城镇到另一个城镇时,都有许多种道路方案可以选择,而某些方案要比另一些方案行走的距离要短很多。这让行人很困扰。
现在,已知起点和终点,请你计算出要从起点到终点,最短需要行走多少距离。
[align=left]Input[/align]
本题目包含多组数据,请处理到文件结束。
每组数据第一行包含两个正整数N和M(0<N<200,0<M<1000),分别代表现有城镇的数目和已修建的道路的数目。城镇分别以0~N-1编号。
接下来是M行道路信息。每一行有三个整数A,B,X(0<=A,B<N,A!=B,0<X<10000),表示城镇A和城镇B之间有一条长度为X的双向道路。
再接下一行有两个整数S,T(0<=S,T<N),分别代表起点和终点。
[align=left]Output[/align]
对于每组数据,请在一行里输出最短需要行走的距离。如果不存在从S到T的路线,就输出-1.
[align=left]Sample Input[/align]
3 3
0 1 1
0 2 3
1 2 1
0 2
3 1
0 1 1
1 2
[align=left]Sample Output[/align]
2
-1
解题分析
此题为经典的求最短路径问题
解题代码
#include <stdio.h> #include <stdlib.h> #define INF 1000000000 int ma[205][205],n; void dij(int v0,int d[205]) { int fin[205]; int i,k,v=0; for(i=0; i<n; i++) { d[i]=ma[v0][i]; fin[i]=0; } fin[v0]=1; d[v0]=0; for(i=1; i<n; i++) { int min=INF; for(k=0; k<n; k++) { if(!fin[k]&&d[k]<mi) { v=k; min=d[k]; } } if(min==INF) return; fin[v]=1; for(k=0; k<n; k++) { if(!fin[k]&&ma[v][k]!=INF) { if(min+ma[v][k]<d[k]) d[k]=min+ma[v][k]; } } } } int main() { int m,i,j,a,b,p; int dis[205]; while(scanf("%d%d",&n,&m)!=EOF) { for(i=0; i<n; i++) for(j=0; j<n; j++) ma[i][j]=INF; for(i=0; i<m; i++) { scanf("%d%d%d",&a,&b,&p); if(ma[a][b]>p) { ma[a][b]=p; ma[b][a]=p; } } scanf("%d%d",&a,&b); if(a==b) printf("0\n"); else { dij(a,dis); if(dis[b]==INF) printf("-1\n"); else printf("%d\n",dis[b]); } } return 0; }
相关文章推荐
- HDU1874 畅通工程续 解题报告--Dijkstra
- acm-hdu1874解题报告
- 【解题报告】HDU 1874 畅通工程续 -- Dijkstra算法详解 单源点最短路问题
- HDU 4893 Wow! Such Sequence! 解题报告(线段树)
- HDU解题报告——1009
- HDU解题报告——1014
- hdu 2014 青年歌手大奖赛_评委会打分 的解题报告
- HDU 1066 解题报告 详细思路+code
- Hdu 2141 解题报告
- HDU——1116解题报告
- HDU 2546 饭卡(01背包) 解题报告
- HDU 1280 解题报告 第 K 大
- hdu 2844 Coins 解题报告
- hdu 5823 2016 Multi-University Training Contest 8 color II 解题报告
- HDU 1281解题报告
- hdu 5326 - Work(递归)解题报告
- 东南大学第四届逻辑算法程序设计竞赛决赛解题报告
- HDU 1050解题报告
- HDU 4741 (我明天一定整个解题报告出来。。。。看线代去)
- HDU 4606 Occupy Cities 解题报告