Floyd算法

 1 #include<iostream>
 2 using namespace std;
 3 int map[100][100];
 4 void Init(int N)
 5 {
 6     for(int i=1; i<=N; i++){
 7         for(int j=1; j<=N; j++){
 8             if(i == j)
 9             map[i][j] = 0;
10             else
11             map[i][j] = 999;
12         }
13     }
14 }
15 void Floyd(int N)
16 {
17     for(int k=1; k<=N; k++){
18         for(int i=1; i<=N; i++){
19             for(int j=1; j<=N; j++){
20                 if(map[i][k] + map[k][j] < map[i][j])
21                 map[i][j] = map[i][k] + map[k][j];
22             }
23         }
24     }
25 }
26 int main()
27 {
28     int N, M, S;// N 表示点的个数, M 表示边的个数, S 表示出发点 
29     int v1, v2, len;
30     
31     cin>>N>>M>>S;
32     
33     Init(N);
34     for(int i=0; i<M; i++){
35         cin>>v1>>v2>>len;
36         map[v1][v2] = len;
37         map[v2][v1] = len;
38     }
39     Floyd(N);
40     for(int i=1; i<=N; i++)
41     cout<<map[i][S]<<" ";
42 } 
43 /*测试用例 
44 5 6 1
45 1 2 14
46 1 3 2
47 1 4 6
48 2 5 2
49 3 4 3
50 4 5 1
51 */
原文地址:https://www.cnblogs.com/Jie-Fei/p/10581227.html