首页 > 代码库 > 【模板】SPFA
【模板】SPFA
单源最短路径算法,可判负环(如果一个点进队超过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 }
【模板】SPFA
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。