首页 > 其他 > 详细

Bellman-Ford最短路

时间:2019-06-10 19:55:51      阅读:142      评论:0      收藏:0      [点我收藏+]
//队列优化 O(E*N)
struct
Edge{ int from,to,dist; Edge(int u,int v,int d):from(u),to(v),dist(d){} }; struct BellmanFord{ int n,m; vector<Edge> edges; vector<int> G[maxn]; bool inq[maxn]; int d[maxn]; int p[maxn]; int cnt[maxn]; void init(int n){ this->n=n; edges.clear(); for(int i=0;i<n;i++) G[i].clear(); } void AddEdge(int from,int to,int dist){ edges.push_back(Edge(from,to,dist)); m=edges.size(); G[from].push_back(m-1); } bool negativeCycle(){ queue<int> Q; memset(inq,0,sizeof(inq)); memset(cnt,0,sizeof(cnt)); for(int i=0;i<n;i++) d[i]=0,inq[i]=true,Q.push(i); while(!Q.empty()){ int u=Q.front();Q.pop(); inq[u]=false; for(int i=0;i<G[u].size();i++){ Edge& e=edges[G[u][i]]; if(d[e.to]>d[u]+e.dist){ d[e.to]=d[u]+e.dist; p[e.to]=G[u][i]; if(!inq[e.to]){ Q.push(e.to); inq[e.to]=true; if(++cnt[e.to]>n) return false; } } } } return true; } };

 

Bellman-Ford最短路

原文:https://www.cnblogs.com/hanasaki/p/10999523.html

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