基于bellman-ford算法与spfa算法判断负环
2018-01-18 11:14
288 查看
概述
spfa是基于bellman-ford算法(以下简称bf算法)改进的。也即将bf算法放入队列实现。说明
当然bf算法还有一种优化方法就是。在外层循环k时,如果发现在构造新的一层路径生成树时整个树没有更新。这样可以直接跳出。具体实现可以在循环中加一个flag判断一下。
文字基于您已熟知spfa以及bf算法。
负环判断方法
1.bf算法更新完状态数组后,再遍历边集,如果对任意e(v,u):d[u] > d[v]+w[v][u];
那么有负环
2.在spfa中判断:
用一个数组c储存每个点入队的次数,如果大于n次。
则有负环。
首先说更新一个状态数组值但是它因为可能已经标记访问了所以未必进队。
此外,我们知道一个点会被更新多次但是不会超过n-1(因为树高就是n-1)
如果有负环,spfa算法一定是不会终止的入队一旦大于n次就可以说明已经进入死循环了。所以可以退出了。
相关文章推荐
- SPFA算法 (基于Bellman-Ford算法)
- uva 558 Wormholes (Bellman-Ford算法判断负环)
- bellman-ford算法(判断是否存在负环)
- poj 3259 最短路判负环 spfa算法和Bellman_ford算法
- 【算法】Bellman-Ford算法(单源最短路径问题)(判断负圈)
- bellman-ford算法的优化spfa算法
- 图之单源最短路径 Bellman-Ford算法 Dijkstra算法 SPFA算法
- 最短路的Bellman-Ford算法 【判断有无负权环】
- Bellman-ford算法判断有无负环
- Currency Exchange (Bellman-Ford算法,判断是否有正权回路)
- Bellman-Ford算法及其优化后的SPFA算法
- 转:Bellman-Ford算法及其改进---SPFA算法
- 单源最短路径:bellman-ford算法和SPFA算法
- POJ 3259 Wormholes【Bellman_ford判断负环】
- 最短路算法 :Bellman-ford算法 & Dijkstra算法 & floyd算法 & SPFA算法 详解
- poj3259Wormholes(bellman_ford判断负环)
- POJ 3259 Wormholes(判断负环&(Bellman-Ford|SPFA))
- poj 3259 (Bellman_Ford判断负环)
- 最短路算法 :Bellman-ford算法 & Dijkstra算法 & floyd算法 & SPFA算法 详解
- poj 3259 Wormholes 【Bellman-Ford 判断负环】