查找包含两个节点的最短周期

时间:2013-05-03 11:50:07

标签: algorithm graph-theory dijkstra

设G =(E,V)是具有非负边缘成本的有向图。让我们成为一个顶点。我需要找到一个算法,找到每个顶点v,包含s和v的最短循环。循环可能包含多次相同的边。

犀利的解决方案是从s运行Dijkstra,以便找到从s到每个v的最短路径。然后,从每个v再次运行Dijkstra,以便找到从v到s的最短路径。最短的周期是两者的结合。

这可行,但需要O(| V || E | + | V | ^ 2 * log | V |)。有更好的解决方案吗?

1 个答案:

答案 0 :(得分:4)

对于有向图,您可以使用Floyd-Warshall Algorithm查找所有两对之间的最短路径。

或者更有效的解决方案是在反向图G'=(V,E')上运行Dijsktra,以便(v,u)E (u,v) E' }在{{1}})中,并结束两个解决方案(当然是一个反向)。 这基本上是两次运行Dijkstra。