到给定顶点的所有最短路径

Posted

技术标签:

【中文标题】到给定顶点的所有最短路径【英文标题】:All Shortest Paths To A Given Vertex 【发布时间】:2013-05-14 19:44:30 【问题描述】:

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

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

如果有人能解释它是否发生以及为什么发生/没有发生,我将不胜感激。

提前致谢。

【问题讨论】:

我目前没有任何正式的东西,但是是的,你的想法应该不错。考虑一下如果图是无向的会发生什么:两条路径显然是相同的。您的建议基本上会导致无向图,因此两者是相同的。 我也是这么想的,不知道有没有某种情况不会发生。 这个的有效性直接来自于你通过反转边缘产生的对称性。你很好。 对于每个关于有向图的陈述,都有一个关于所有边反转的图的双重陈述。你的就是一个例子。 有些事情因为太明显而难以证明。 (我记得 Knuth 曾对此大肆咆哮。)这就是其中之一。 【参考方案1】:

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

假设一个顶点v,在图G中,从vk的最短路径是长度m。 您想知道的两件事是: 1. 在逆向图 G* 中,有一条长度为 m 的路径从 kv。 2. 在反向图 G* 中,没有从 kv 的路径短于 m

在我开始之前,我们能否相信一件事:引理 1:如果你有一条从顶点 v 到顶点 w 的有向路径,然后你反转路径上的每条边,然后你有一条从顶点 w 到顶点 v 的路径。这是可以证明的,但我认为这是相当常识的。如果你要我证明,我会证明的。

对于第 1 点:考虑 G 中从 v 到由 m 条边组成的 k 的路径。如果你反转这些边中的每一个,你将有一条从 kv 长度为 m 的路径(由 Lemma 1 em>)。

对于第 2 点:假设逆向图 G* 中存在一条路径,从 kv,长度为 n m。如果你反转这条路径,那么从 vk 的路径长度为 n (Lemma 1) .这意味着在原始图中有一条从 vk 的路径比 m 短,这与长度的路径的说法相矛盾m 是最短的。

【讨论】:

或者,抽象:路径被反转后长度相同。因此,如果从 a 到 b 的一条路径比从 a 到 b 的另一条路径短,那么一旦它们被颠倒,它也是从 b 到 a 的更短路径。

以上是关于到给定顶点的所有最短路径的主要内容,如果未能解决你的问题,请参考以下文章

数据结构图之三(最短路径--迪杰斯特拉算法——转载自i=i++

图-最短路径-Dijkstra及其变种

Dijkstra算法

数据结构8——最短路径

图文解析 Dijkstra单源最短路径算法

贪心算法初探3——最短路径(Dijkstra算法)