dijistra

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 const int maxn = 1e5+5,inf = 1e9;
 4 struct node{
 5     int to,w;
 6 };
 7 vector<node>e[maxn];
 8 int d[maxn],p[maxn];
 9 int n,m,s;
10 inline void add(int x,int y,int z){
11     node t;
12     t.to = y;
13     t.w = z;
14     e[x].push_back(t);
15 }
16 inline void dijistra(){
17     for(int i = 1;i <= n;i++)d[i] = inf;
18     d[s] = 0;
19     for(int i = 1;i <= n;i++){
20         int mins = inf,k;
21         for(int j = 1;j <= n;j++)
22             if(!p[j] && d[j] < mins){
23                 mins = d[j];k=j;
24             }
25         p[k]=1;
26         for(int j = 0;j < e[k].size();j++){
27             node v = e[k][j]; 
28             if(d[v.to] > d[k]+v.w)d[v.to] = d[k]+v.w;
29         } 
30     }
31 }
32 int main(){
33     cin>>n>>m>>s;
34     for(int i=1,x,y,z;i<=m;i++){        
35         scanf("%d%d%d",&x,&y,&z);
36         add(x,y,z);
37     }
38     dijistra();
39     for(int i = 1;i <= n;i++)
40         if(d[i] < inf)printf("%d ",d[i]);
41         else printf("2147483647 ");
42     return 0;
43 }
相關文章
相關標籤/搜索