给定顶点的所有最短路径

时间:2013-05-20 09:22:23

标签: algorithm graph dijkstra shortest-path

给定有向图G =(V,E)和权重函数w:E - > R +(图中边缘只有正权重),我需要找到从V中每个顶点v到给定顶点k的所有最短路径。

我考虑过反转图中的边,然后从顶点k运行Dijkstra's algorithm。我想知道从k到v1的最短路径p是否实际上是原始图形中从v1到k的最短路径(在反转边缘之前)。

如果有人能解释是否以及为什么会这样做,我将不胜感激。

提前致谢。

1 个答案:

答案 0 :(得分:2)

(这不是世界上最正式的证据,但希望它足以说服自己)。

假设对于顶点 v ,在图 G 中,从 v k 的最短路径是长度 m 。 你想知道的两件事是:
 1.在反转图G *中,从 k v 的路径长度为 m
 2.在反转图G *中,没有 k v 的路径比 m 短。

在我开始之前,我们可以对信仰采取一件事:
引理1 :如果你有一个从顶点 v 到顶点 w 的有向路径,并且你反转了路径上的每一条边,那么你有一个从顶点 w 到顶点 v 的路径。这是可以证明的,但我认为这是相当常识。如果你想要我,我会证明这一点。

对于第1点:考虑 G 中从 v k 的路径,包括 m 边缘。如果你反转这些边缘,你将有一条从 k v 的长度为 m 的路径(由引理1 )。

对于第2点:假设在反转图G *中存在一条路径,从 k v 长度 n < 。如果您反转此路径,那么从 v k 引理1 )的路径长度 n 。这意味着原始图形中存在从 v k 的路径,该路径比 m 短,与长度路径的语句相矛盾 m 是最短的。