到给定顶点的所有最短路径
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中,从v到k的最短路径是长度m。 您想知道的两件事是: 1. 在逆向图 G* 中,有一条长度为 m 的路径从 k 到 v。 2. 在反向图 G* 中,没有从 k 到 v 的路径短于 m。
在我开始之前,我们能否相信一件事:引理 1:如果你有一条从顶点 v 到顶点 w 的有向路径,然后你反转路径上的每条边,然后你有一条从顶点 w 到顶点 v 的路径。这是可以证明的,但我认为这是相当常识的。如果你要我证明,我会证明的。
对于第 1 点:考虑 G 中从 v 到由 m 条边组成的 k 的路径。如果你反转这些边中的每一个,你将有一条从 k 到 v 长度为 m 的路径(由 Lemma 1 em>)。
对于第 2 点:假设逆向图 G* 中存在一条路径,从 k 到 v,长度为 n m。如果你反转这条路径,那么从 v 到 k 的路径长度为 n (Lemma 1) .这意味着在原始图中有一条从 v 到 k 的路径比 m 短,这与长度的路径的说法相矛盾m 是最短的。
【讨论】:
或者,抽象:路径被反转后长度相同。因此,如果从 a 到 b 的一条路径比从 a 到 b 的另一条路径短,那么一旦它们被颠倒,它也是从 b 到 a 的更短路径。以上是关于到给定顶点的所有最短路径的主要内容,如果未能解决你的问题,请参考以下文章