POJ3259—Bellman-Ford算法实现
来源:互联网 发布:mysql登录命令 编辑:程序博客网 时间:2024/05/16 02:31
题目的大意是有F个农场,每个农场有N个牧场,M条双向路径,W个虫洞,虫洞是单向的,可以实现时间旅行,返回到以前某个时间。问从某个牧场出发,经过若干路径和虫洞,能否在没有离开出发地时回到出发地,见到自己。
其实就是一个用Bellman-Ford算法求负权环的问题,当图中存在负权环时,就能够在出发之前回到出发地,见着自己,将虫洞的权值加上负号,然后再用Bellman-Ford算法求解就可以了。
多说一句,应该看看POJ1860、POJ2240、POJ3259(本题)这三个题目,比较一下,加深对Bellman-Ford算法的理解,很有帮助的。
#include <iostream>#include <cstdio>#define inf 1000000using 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算法实现
- poj3259 bellman—ford
- POJ3259 Bellman-Ford算法 求负环
- poj3259 Wormholes (Bellman-Ford算法)
- POJ3259--Wormholes--Bellman-Ford算法经典题
- poj3259 Bellman-Ford
- [水]poj3259 (Bellman-ford)
- Bellman-ford算法实现
- Bellman-Ford算法实现
- POJ3259 Wormholes (Bellman-Ford最短路径算法)
- POJ3259《Wormholes》方法:Bellman-ford
- Bellman-Ford算法实现类
- Bellman-Ford算法的实现
- Bellman-Ford算法实现小结
- POJ1860—Bellman-Ford算法
- POJ3259 Wormholes(Bellman-ford 负环)
- C++算法实现Bellman-Ford算法
- Java C 实现Bellman-ford算法
- 谈 Spring-Transaction(Spring事务管理 第一篇)
- 超酷2012伦敦奥运会多次曝光效果摄影作品集
- Java Proxies and UndeclaredThrowableException
- 小米也打价格战?会有1999的小米2吗?
- Android实现HTML5 video
- POJ3259—Bellman-Ford算法实现
- 数据库登录错误
- Blender 2.63 中文界面设置
- 网络爬虫学习(1)
- LDD3源码分析之时间与延迟操作
- 学习正则表达式点滴
- 数据库管理员岗位职责
- 如何检测系统中的java的版本是多少
- Moss练习---常见错误