最短路

在每年的校赛里,所有进入决赛的同学都会获得一件很漂亮的T-shirt。但是每当我们的工作人员把上百件的衣服从商店运回到赛场的时候,却是非常累的!所以现在他们想要寻找最短的从商店到赛场的路线,你可以帮助他们吗?

Input

输入包括多组数据。

每组数据第一行是两个整数NN ,MM (N100N≤100 ,M10000M≤10000 ),NN 表示成都的大街上有几个路口,标号为11 的路口是商店所在地,标号为NN 的路口是赛场所在地,MM 则表示在成都有几条路。N=M=0N=M=0 表示输入结束。

接下来MM 行,每行包括33 个整数AA ,BB ,CC (1A1≤A ,BNB≤N ,1C10001≤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 }
原文地址:https://www.cnblogs.com/zllwxm123/p/7229778.html