hdu 1874畅通工程续 Floyd算法
2016-04-02 22:23
281 查看
[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]
[align=left]Sample Output[/align]
最最关键一点!!Floyd算法的三重循环顺序是有要求的!!!大家千万要注意 !!
另外还有注意一条边加多次,自身到自身的边等。
坑爹的是,a[I][I]=0这个操作我一开始写在了上面,因此完全不起作用。这告诉我们,循环里语句要注意顺序。
某省自从实行了很多年的畅通工程计划后,终于修建了很多路。不过路多了也不好,每次要从一个城镇到另一个城镇时,都有许多种道路方案可以选择,而某些方案要比另一些方案行走的距离要短很多。这让行人很困扰。
现在,已知起点和终点,请你计算出要从起点到终点,最短需要行走多少距离。
[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
最最关键一点!!Floyd算法的三重循环顺序是有要求的!!!大家千万要注意 !!
另外还有注意一条边加多次,自身到自身的边等。
坑爹的是,a[I][I]=0这个操作我一开始写在了上面,因此完全不起作用。这告诉我们,循环里语句要注意顺序。
//本题为Floyd算法 #include<stdio.h> #include<string.h> #include<math.h> #include<algorithm> #include<limits.h> using namespace std; int a[210][210],n,m,aa,bb,x,s,t; int main(void) { while(~scanf("%d%d",&n,&m)) { for(int i=0;i<200;i++) for(int j=0;j<200;j++) { a[i][j]=100000000; a[i][i]=0;//重要!放在上面导致WA多次! } for(int i=0;i<m;i++) { scanf("%d%d%d",&aa,&bb,&x); if(x<a[aa][bb]) a[aa][bb]=a[bb][aa]=x;//防止一条路出现两次!!! } scanf("%d%d",&s,&t); for(int k=0;k<n;k++) for(int i=0;i<n;i++) for(int j=0;j<n;j++)//注意循环顺序!!! a[i][j]=min(a[i][k]+a[k][j],a[i][j]); if(a[s][t]==100000000) printf("-1\n"); else printf("%d\n",a[s][t]); } return 0; }
相关文章推荐
- 剑指Offer学习笔记(4)——时间效率
- nginx的root和alias指令的区别
- 文件操作-Malloc笔记
- 1234,四个不同的数字组成多少种不同的数
- lintcode:Wiggle Sort II
- 【java集合框架源码剖析系列】java源码剖析之HashMap
- eSpeak: Linux文本转语音工具
- Linux优化-Preempt RT关键点
- Android常见问题集锦
- GitHub 上排名前 100 的 Android 开源库介绍
- Android应用自动更新功能的代码实现
- Python Thread
- 【java集合框架源码剖析系列】java源码剖析之HashMap
- leetcode 19.Remove Nth Node From End of List
- wamp虚拟主机配置
- [转] Mac OX上安装MongoDb
- uva 401.Palindromes
- 当tableview/scrollview滚动时定时器NSTimer / CADisplayLink停止响应问题
- 推荐一个GitHub上的软件工程师的面试题库
- 如何获取Activity的实例