POJ3259—Bellman-Ford算法实现
2012-08-15 11:27
281 查看
题目的大意是有F个农场,每个农场有N个牧场,M条双向路径,W个虫洞,虫洞是单向的,可以实现时间旅行,返回到以前某个时间。问从某个牧场出发,经过若干路径和虫洞,能否在没有离开出发地时回到出发地,见到自己。
其实就是一个用Bellman-Ford算法求负权环的问题,当图中存在负权环时,就能够在出发之前回到出发地,见着自己,将虫洞的权值加上负号,然后再用Bellman-Ford算法求解就可以了。
多说一句,应该看看POJ1860、POJ2240、POJ3259(本题)这三个题目,比较一下,加深对Bellman-Ford算法的理解,很有帮助的。
其实就是一个用Bellman-Ford算法求负权环的问题,当图中存在负权环时,就能够在出发之前回到出发地,见着自己,将虫洞的权值加上负号,然后再用Bellman-Ford算法求解就可以了。
多说一句,应该看看POJ1860、POJ2240、POJ3259(本题)这三个题目,比较一下,加深对Bellman-Ford算法的理解,很有帮助的。
#include <iostream> #include <cstdio> #define inf 1000000 using namespace std; const int maxn=502; const int maxm=5210; int n,m,w,num,dist[maxn]; struct Edge { int u; //边的起点 int v; //边的终点 int w; }edge[maxm]; bool Bellman_Ford() { int i,j; bool flag; dist[1]=0; for(i=1;i<n;i++) { flag=false; for(j=0;j<num;j++) if(dist[edge[j].u]+edge[j].w<dist[edge[j].v]) { dist[edge[j].v]=dist[edge[j].u]+edge[j].w; flag=true; } if(!flag) //不存在负权环 return false; } for(i=0;i<num;i++) if(dist[edge[i].u]+edge[i].w<dist[edge[i].v]) return true; //经过n-1次的松弛操作后还能更新,说明存在负权环 } int main() { int i,j,f,s,e,t; scanf("%d",&f); while(f--) { scanf("%d%d%d",&n,&m,&w); num=0; for(i=0;i<m;i++) //普通路径,双向边 { scanf("%d%d%d",&s,&e,&t); edge[num].u=s; edge[num].v=e; edge[num++].w=t; edge[num].u=e; edge[num].v=s; edge[num++].w=t; } for(i=0;i<w;i++) { scanf("%d%d%d",&s,&e,&t); edge[num].u=s; edge[num].v=e; edge[num++].w=-t; } for(i=1;i<=n;i++) dist[i]=inf; if(Bellman_Ford()) printf("YES\n"); else printf("NO\n"); } return 0; }
相关文章推荐
- POJ3259 Bellman-Ford算法 求负环
- Bellman-Ford算法实现小结
- 求任意权值最短路径的Bellman-Ford算法实现
- poj3259 Bellman_ford算法
- poj3259 Wormholes (Bellman-Ford算法)
- Bellman-Ford算法的实现
- Java C 实现Bellman-ford算法
- C++算法实现Bellman-Ford算法
- SPFA 算法的学习--基于Bellman-Ford算法的一种队列实现
- SPFA 算法的学习--基于Bellman-Ford算法的一种队列实现
- Bellman-Ford算法实现
- POJ3259--Wormholes--Bellman-Ford算法经典题
- Bellman-ford算法 实现源点最短路径 允许路径中有负权值
- Bellman-ford算法实现
- BZOJ2330 差分约束之浅谈数学不等式拓扑逻辑顺序转化为图论中队列实现广度优先搜索的最长路之双端队列Bellman-Ford算法及入队次数判断自环
- POJ3259-JAVA语言描述-Bellman_Ford算法
- bellman_ford算法 python实现
- POJ3259 Wormholes(bellman)
- POJ3259 农场与虫洞 图论(Bellman-Ford求负环)
- Bellman-Ford算法