POJ-3259 Wormholes (bellman_ford算法)
来源:互联网 发布:光荣使命手游巨人网络 编辑:程序博客网 时间:2024/05/18 17:00
题目大意:
大概就是说,一个农夫在自己的农庄里面有n块田地。
在这n块田地中有m条路径(双向),以及w条虫洞,虫洞可以使得回到n时刻前的某块地上。
问,农夫能否在这个农庄里面通过虫洞看到从前的自己。
算法分析:
这道题就是判断是否会出现负环,直接把虫洞当成一条权值为负值的路径即可。
用到的算法是ballman_ford算法。直接是裸的算法模板。我因为个人问题WA了n次,最后写了n次后才发现问题所在。
bellman_ford算法网上有很多,这里就不赘述了(其实只是不懂原理好吗= =)
代码:
#include <iostream>#include <algorithm>#include <stdio.h>#define MAXNUM 0x7ffffffusing namespace std;struct node{ int begin; int end; int cost;} edge[6000];int n, m, w, count_;int maxn[550];bool bellman_ford(){ bool flag; int x, y, cost; for (int i = 1; i <= n; i++) { maxn[i] = MAXNUM; } maxn[1] = 1; for (int i = 1; i <= n; i++) { flag = true; for (int j = 1; j <= count_; j++) { x = edge[j].begin; y = edge[j].end; cost = edge[j].cost; if (maxn[x] + cost < maxn[y]) { maxn[y] = maxn[x] + cost; flag = false; } } if (flag) break; } for (int i = 1; i <= count_; i++) { x = edge[i].begin; y = edge[i].end; cost = edge[i].cost; if (maxn[y] > maxn[x] + cost) return true; } return false;}int main(){ int t; int x, y, cost; scanf("%d", &t); while (t--) { count_ = 0; scanf("%d%d%d", &n, &m, &w); for (int i = 1; i <= m; i++) { scanf("%d%d%d", &x, &y, &cost); edge[++count_].begin = x; edge[count_].end = y; edge[count_].cost = cost; edge[++count_].begin = y; edge[count_].end = x; edge[count_].cost = cost; } for (int i = 1; i <= w; i++) { scanf("%d%d%d", &x, &y, &cost); edge[++count_].begin = x; edge[count_].end = y; edge[count_].cost = -cost; }// for (int i = 1; i <= count_; i++) {// printf("begin:%d\tend:%d\tcost:%d\n", edge[i].begin, edge[i].end, edge[i].cost);// } if (bellman_ford()) { printf("YES\n"); } else { printf("NO\n"); } } return 0;}
0 0
- POJ-3259 Wormholes (bellman_ford算法)
- POJ 3259:Wormholes:bellman_ford算法判负环
- POJ 3259 Wormholes (bellman_ford算法判负环)
- POJ 3259 Wormholes bellman_ford
- poj 3259 Wormholes (bellman_ford)
- POJ 3259 Wormholes (bellman_ford)
- POJ 3259 Wormholes (Bellman_Ford)
- POJ 3259 Wormholes(Bellman_Ford判负圈)
- poj 3259 Wormholes[ bellman_ford 判负环]
- Poj 3259 Wormholes(bellman_ford判负环)
- POJ 3259 Wormholes(最短路Bellman_Ford)
- Wormholes (poj 3259 SPFA || Bellman_Ford 判负环)
- POJ 3259:Wormholes bellman_ford判定负环
- POJ 3259 bellman_ford算法
- 【POJ 3259】Wormholes(最短路SPFA/Bellman_Ford)
- (POJ 3259)Wormholes 判断负环 bellman_ford 或者 spfa
- poj Wormholes最短路问题(bellman_ford)
- poj Wormholes(Bellman_ford寻找负权环)
- Redis基础
- HDU 4003Find Metal Mineral
- java基础
- 也谈谈Unity的transform使用
- 关于tab切换一些方法总结
- POJ-3259 Wormholes (bellman_ford算法)
- 虚拟机下安装docker,并且ssh与的连接(centos6)--docker笔记
- 模拟http发送post请求并返回数据
- 【codeforces 731 C Socks】+ DFS
- linux下常用指令
- java对象拷贝——PropertyUtils.copyProperties()用法和性能
- Could not find method com.loopj.android.http.AsyncHttpResponseHandler
- git stash命令总结
- js事件详解