码迷,mamicode.com
首页 > 其他好文 > 详细

模板:单源最短路径

时间:2018-07-19 21:16:57      阅读:128      评论:0      收藏:0      [点我收藏+]

标签:string   problem   nbsp   return   pre   name   ring   cstring   space   

spfa

https://www.luogu.org/problemnew/show/P3371

 

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cstring>
 4 using namespace std;
 5 int n, m, s;
 6 struct pan{
 7     int to, next, val;
 8 }run[500005];
 9 int head[500005], vis[500005], dis[500005], q[500005];
10 int node=0;
11 void add(int u,int v,int w){
12     run[++node].to=v;
13     run[node].val=w;
14     run[node].next=head[u];
15     head[u]=node;
16 }
17 void spfa(){
18     int u,l=0;
19     int r=1;
20     q[1]=s;
21     vis[s]=1;
22     dis[s]=0;
23     while(l<r){
24         u=q[++l];
25         vis[u]=0;
26         for(int i=head[u];i!=-1;i=run[i].next){
27             if(dis[run[i].to]>dis[u]+run[i].val){
28                 dis[run[i].to]=dis[u]+run[i].val;
29                 if(vis[run[i].to]==0){
30                     vis[run[i].to]=1;
31                     q[++r]=run[i].to;
32                 }
33             }
34         }
35     }
36 }
37 int main(){
38     int u,v,w;
39     cin>>n>>m>>s;
40     memset(dis,0x3f,sizeof(dis));
41     for(int i=1;i<=m;i++){
42         head[i]=-1;
43     }
44     for(int i=1;i<=m;i++){
45         cin>>u>>v>>w;
46         add(u,v,w);
47     }
48     spfa();
49     for(int i=1;i<=n;i++){
50         if(i==s) cout<<0<<" ";
51         else{
52             if(dis[i]==0x3f3f3f3f) cout<<2147483647<<" ";
53             else cout<<dis[i]<<" ";
54         }    
55     }
56     return 0;
57 }

 

模板:单源最短路径

标签:string   problem   nbsp   return   pre   name   ring   cstring   space   

原文地址:https://www.cnblogs.com/Aze-qwq/p/9337718.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!