Bellman-Ford 算法检测啥?负重还是负循环?

Posted

技术标签:

【中文标题】Bellman-Ford 算法检测啥?负重还是负循环?【英文标题】:What does Bellman-Ford algorithm detects? Negative weight or negative cycle?Bellman-Ford 算法检测什么?负重还是负循环? 【发布时间】:2013-11-14 14:53:21 【问题描述】:

如果给定一张图,现在我们要从源头计算最短路径。现在,如果一条边的权重为负,但是在到达目的地时有边到后端可以回到该边,我的意思是如果没有循环,那么我们就没有负循环。但是***中的here 给定的算法再次从源运行,因此它检测到负边权重而不是负循环。我的问题是,如何确定负循环?

【问题讨论】:

cs.stackexchange.com/questions/6919/… 【参考方案1】:

负权重循环是权重总和为负数的循环。 Bellman-Ford 算法以 V-1 步将正确的距离估计传播到图中的所有节点,除非存在负权重循环。如果存在负权重循环,您可以无限期地放松其节点。因此,在 V-1 步之后放松边缘的能力是对负权重循环存在的测试,如 Wikipedia 算法中所见。因此,Bellman-Ford 算法测试负权重循环。

【讨论】:

【参考方案2】:

您可以参考此链接来确定实际的负循环。 https://cp-algorithms.com/graph/finding-negative-cycle-in-graph.html 在算法的最后一次迭代中。我们只知道受影响的节点。 由于负循环而受到影响。 实际负循环形成parent[parent[parent]的无限循环。

代码的第二个循环就像从顶部扔一个弹球,一段时间后弹球无限绕着一个圆形迷宫旋转。我们找到了那个圆形迷宫。

【讨论】:

以上是关于Bellman-Ford 算法检测啥?负重还是负循环?的主要内容,如果未能解决你的问题,请参考以下文章

Bellman-Ford算法的介绍

2018年8月14号(回顾spfa)

算法笔记:图论中的单源最短路径算法——Bellman-Ford 算法

图论中的重要算法(Dijstra,Bellman-Ford,Floyd,Ford-Fulkerson,匈牙利算法)的详细解读及实现

单源最短路径—Bellman-Ford算法 Dijkstra算法

2018.3.10 bellman-ford algorithm, floyd-warshall algorithm and johnson's algorithm