设G =(E,V)是具有非负边缘成本的有向图。让我们成为一个顶点。我需要找到一个算法,找到每个顶点v,包含s和v的最短循环。循环可能包含多次相同的边。
犀利的解决方案是从s运行Dijkstra,以便找到从s到每个v的最短路径。然后,从每个v再次运行Dijkstra,以便找到从v到s的最短路径。最短的周期是两者的结合。
这可行,但需要O(| V || E | + | V | ^ 2 * log | V |)。有更好的解决方案吗?
答案 0 :(得分:4)
对于有向图,您可以使用Floyd-Warshall Algorithm查找所有两对之间的最短路径。
或者更有效的解决方案是在反向图(G'=(V,E')
上运行Dijsktra,以便(v,u)
中E
(u,v)
E'
}在{{1}})中,并结束两个解决方案(当然是一个反向)。 这基本上是两次运行Dijkstra。