首页 > 其他 > 详细

【模板】SPFA

时间:2017-04-14 13:21:51      阅读:192      评论:0      收藏:0      [点我收藏+]

单源最短路径算法,可判负环(如果一个点进队超过N次,则存在负环)

技术分享
 1 #include<stdio.h>
 2 #define maxv 10005
 3 #define maxe 500005
 4 #define inf 210000000
 5 int vert,edg,tot,s,fr[maxv],to[maxe],nxt[maxe],w[maxe],que[maxe],dist[maxv];
 6 bool inq[maxv];
 7 void adde(int p,int q,int W)
 8 {to[++tot]=q;w[tot]=W;nxt[tot]=fr[p];fr[p]=tot;}
 9 void spfa();
10 int main()
11 {
12     scanf("%d%d%d",&vert,&edg,&s);
13     int i,p,q,W;
14     for(i=1;i<=edg;i++)
15         scanf("%d%d%d",&p,&q,&W),adde(p,q,W);
16     spfa();
17     for(i=1;i<=vert;i++) printf("%d ",dist[i]);
18     return 0;
19 }
20 void spfa()
21 {
22     int l=0,r=0,i,now,t;
23     for(i=1;i<=vert;i++) dist[i] = inf;
24     dist[s] = 0;que[++r] = s; inq[s] = true;
25     while(l<r)
26     {
27         now = que[++l];
28         inq[now] = false;
29         for(i=fr[now];i;i=nxt[i])
30         {
31             t = to[i];
32             if(dist[t]>dist[now]+w[i])
33             {
34                 dist[t] = dist[now]+w[i];
35                 if(!inq[t]){que[++r]=t;inq[t]=true;}
36             }
37         }
38     } 
39 }
View Code

 

【模板】SPFA

原文:http://www.cnblogs.com/hzs2000/p/6708343.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!