Floyd-Warshall 算法与循环?
Posted
技术标签:
【中文标题】Floyd-Warshall 算法与循环?【英文标题】:Floyd-Warshall algorithm with loops? 【发布时间】:2016-01-18 20:58:18 【问题描述】:我正在实现 Floyd-Warshall 算法,我有一个问题: 如果我的图中有一个循环(我的意思是,从 A 到 A 的成本是 1),算法应该输出什么,0(因为从任何节点到同一个节点的成本是 0),或者 1 (因为从 A 到 A 有一条成本为 1 的边?
我没有包含任何代码,因为这只是那个问题。
【问题讨论】:
0 因为这就是答案:) 这也要看循环的权重是否为负。如果允许具有负权重的循环,则通过重复该循环,最短路径的长度可以任意小。 不,负权重的循环是不允许的,所以答案应该是 0...谢谢! 基本上你应该将任意两个不同顶点的距离矩阵初始化为无穷大,在对角线上初始化为零,之后你就不必担心了。 【参考方案1】:在 Floyd-Warhsall 算法的 Wikipedia article 中有一段明确讨论如何处理负长度的循环,如下所示。
负循环是其边缘总和为负值的循环。在构成负循环的任何一对顶点 i、j 之间没有最短路径,因为从 i 到 j 的路径长度可以任意小(负)。对于具有数值意义的输出,Floyd-Warshall 算法假设没有负循环。然而,如果存在负循环,则可以使用 Floyd-Warshall 算法来检测它们。
包括细节,最终算法的内部工作原理如下。
因此,使用 Floyd-Warshall 算法检测负循环,可以检查路径矩阵的对角线,负数的存在表明该图至少包含一个负循环。
【讨论】:
以上是关于Floyd-Warshall 算法与循环?的主要内容,如果未能解决你的问题,请参考以下文章
适用于负循环的 Floyd-Warshall 算法 [关闭]