【问题标题】:Floyd-Warshall algorithm with loops?Floyd-Warshall 算法与循环?
【发布时间】:2016-01-18 20:58:18
【问题描述】:

我正在实现 Floyd-Warshall 算法,我有一个问题: 如果我的图中有一个循环(我的意思是,从 A 到 A 的成本是 1),算法应该输出什么,0(因为从任何节点到同一个节点的成本是 0),或者 1 (因为从 A 到 A 有一条成本为 1 的边?

我没有包含任何代码,因为这只是那个问题。

【问题讨论】:

  • 0 因为这就是答案:)
  • 这也要看循环的权重是否为负。如果允许具有负权重的循环,则通过重复该循环,最短路径的长度可以任意小。
  • 不,负权重的循环是不允许的,所以答案应该是 0...谢谢!
  • 基本上你应该将任意两个不同顶点的距离矩阵初始化为无穷大,在对角线上初始化为零,之后你就不必担心了。

标签: algorithm graph graph-algorithm dijkstra floyd-warshall


【解决方案1】:

在 Floyd-Warhsall 算法的 Wikipedia article 中有一段明确讨论如何处理负长度的循环,如下所示。

负循环是其边缘总和为负值的循环。在构成负循环的任何一对顶点 i、j 之间没有最短路径,因为从 i 到 j 的路径长度可以任意小(负)。对于具有数值意义的输出,Floyd-Warshall 算法假设没有负循环。然而,如果存在负循环,则可以使用 Floyd-Warshall 算法来检测它们。

包括细节,最终算法的内部工作原理如下。

因此,使用 Floyd-Warshall 算法检测负循环,可以检查路径矩阵的对角线,负数的存在表明该图至少包含一个负循环。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-05-09
    • 2015-04-26
    • 2015-01-31
    • 1970-01-01
    • 1970-01-01
    • 2018-11-11
    • 1970-01-01
    • 2011-02-10
    相关资源
    最近更新 更多