Floyd-Warshall循环算法



我正在实现Floyd-Warshall算法,我有一个问题:如果我的图中有一个循环(我的意思是,从a到a的代价是1)那么算法的输出应该是0(因为从任意节点到同一节点的代价是0)还是1(因为从a到a有一条边的代价是1)

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

在维基百科关于Floyd-Warhsall算法的文章中,有一段明确讨论了如何处理负长度的循环,如下所示。

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

包括细节在内,最后算法的内部工作原理如下:

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

最新更新