最短路
在每年的校赛里,所有进入决赛的同学都会获得一件很漂亮的T-shirt
。但是每当我们的工作人员把上百件的衣服从商店运回到赛场的时候,却是非常累的!所以现在他们想要寻找最短的从商店到赛场的路线,你可以帮助他们吗?
Input
输入包括多组数据。
每组数据第一行是两个整数NN ,MM (N≤100N≤100 ,M≤10000M≤10000 ),NN 表示成都的大街上有几个路口,标号为11 的路口是商店所在地,标号为NN 的路口是赛场所在地,MM 则表示在成都有几条路。N=M=0N=M=0 表示输入结束。
接下来MM 行,每行包括33 个整数AA ,BB ,CC (1≤A1≤A ,B≤NB≤N ,1≤C≤10001≤C≤1000 ),表示在路口AA 与路口BB 之间有一条路,我们的工作人员需要CC 分钟的时间走过这条路。
输入保证至少存在11 条商店到赛场的路线。
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
直接用Floyd算法,
https://vjudge.net/problem/UESTC-30
1 #include<iostream> 2 #include <cstdio> 3 #include<cstring> 4 #include<algorithm> 5 #define inf 0x3f3f3f3f 6 using namespace std; 7 8 int p[105][105]; 9 int main(){ 10 int a,b,n,m,k; 11 while(scanf("%d%d",&a,&b)&&!(a==0||b==0)){ 12 for(int i=1;i<=a;i++){ 13 for(int j=1;j<=a;j++){ 14 if(i==j){ 15 p[j][i]=0; 16 }else{ 17 p[j][i]=inf; 18 } 19 } 20 } 21 while(b--){ 22 scanf("%d%d%d",&n,&m,&k); 23 if(p[n][m]>k) 24 p[n][m]=p[m][n]=k; 25 } 26 for(int i=1;i<=a;i++){ 27 for(int j=1;j<=a;j++){ 28 for(int l=1;l<=a;l++){ 29 p[j][l]=p[l][j]=min(p[l][j],p[l][i]+p[i][j]); 30 } 31 } 32 } 33 cout<<p[1][a]<<endl; 34 } 35 return 0; 36 }