Algorithm 寻找包含两个节点的最短循环

Algorithm 寻找包含两个节点的最短循环,algorithm,graph-theory,dijkstra,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|)。有更好的解决方案吗?对于有向图,您可以使用查找所有两对之间的最短路径 或者一个更有效的解决方案可以是在反向图上运行Dijsk

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

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


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

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


或者一个更有效的解决方案可以是在反向图上运行Dijsktra(
G'=(V,E')
,这样对于
E
中的每个
(V,u)
(u,V)
都在
E'
中),并连接两个解决方案(当然是反向的)这基本上是运行Dijkstra两次。

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


或者一个更有效的解决方案可以是在反向图上运行Dijsktra(
G'=(V,E')
,这样对于
E
中的每个
(V,u)
(u,V)
都在
E'
中),并连接两个解决方案(当然是反向的)这基本上是运行Dijkstra两次。

我认为这个问题更适合数学论坛。是的,有一个解决方案可以运行Dijkstra两次。@MichelKeijzers这是一个计算机科学问题,可能更适合,但这些问题也适用。这听起来不像一个问题,但我很可能是错的。我认为这个问题更适合数学论坛。是的,有一个解决方案可以运行Dijkstra两次。@MichelKeijzers这是一个计算机科学问题,可能更适合,但这些问题也适用。这听起来不是个问题,但我很可能是错的。