最短路径

参考博客:https://blog.csdn.net/tianhaobing/article/details/65443049

 1 #include<iostream>
 2 using namespace std;
 3 int main(){
 4     int A[100][100];
 5     int flag[10]={0};
 6     int dis[10];
 7     int point;
 8     int edge;
 9     int inf = 99999999;
10     cin>>point>>edge;
11     for(int i=1;i<=point;i++){
12         for(int j=1;j<=point;j++){
13             if(i!=j) A[i][j] = inf;
14             else A[i][i] = 0; 
15         }
16     }
17     
18     for(int i=1;i<=edge;i++){
19         int t1,b,c;
20         cin>>t1>>b>>c;
21         A[t1][b] = c;
22         //A[b][a] = c;
23     } 
24     
25     
26     for(int i=1;i<=point;i++){
27         dis[i] = A[1][i];
28     }
29     
30     flag[1] = 1;
31     
32     int index ;
33     
34     for(int i=1;i<=point;i++){
35         int min = inf;
36         for(int j=1;j<=point;j++){
37             if(dis[j]<min && flag[j]==0){
38                 min = dis[j];
39                 index = j;
40             }
41         }
42         
43         flag[index] = 1;
44         
45         for(int k=1;k<=point;k++){
46             if(A[index][k] < inf){
47                 if(dis[k] > dis[index] + A[index][k] ){
48                     dis[k] = dis[index] + A[index][k];
49                 }
50             }
51         }
52             
53     }
54     
55     for(int i=1;i<=point;i++){
56         cout<<"The distance form point 1 to point "<<i<<" is  "<<dis[i]<<endl;
57     }
58     
59     
60     
61     
62     
63     
64 } 

猜你喜欢

转载自www.cnblogs.com/sysu-eeman-yang/p/9033626.html