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 */