【模板】SPFA
单源最短路径算法,可判负环(如果一个点进队超过N次,则存在负环)
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
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 }
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步