在 Floyd-Warshall 算法中添加边

Adding an edge in Floyd-Warshall algorithm

假设我们已经使用 Floyd-Warshall 算法计算了图中的所有对距离矩阵。添加新边时,我们如何有效地更新这个距离矩阵?

我们当然可以重新运行 Floyd-Warshall 算法,但这需要 O(V^3)。我们可以让它更快吗?

假设边从顶点 v 到顶点 w 并且成本为 c :

如果距离矩阵已经有一条从v到w的较短路径,那么添加边没有任何效果,所以没有什么可做的。

否则,新边成为从vw的最短路径,所以将其输入到距离矩阵中,然后,对于每隔一对顶点 ab,看看是否可以通过使用新边使其更短。从距离矩阵可以很容易地找到 a-v-w-ba-w-v-b 的成本。请注意,一个 ab 可能与 vw.

因为你必须检查每一对顶点,这需要 O(V2) 时间。