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

标签 algorithm graph-theory dijkstra

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

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

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

最佳答案

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

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

关于algorithm - 寻找包含两个节点的最短循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16358259/

相关文章:

algorithm - 您能说出这种音频压缩算法吗?

postgresql - Postgres CTE : type character varying(255)[] in non-recursive term but type character varying[] overall

algorithm - 图算法计算不同起始顶点和一个结束顶点之间的所有可能路径

c++ - 没有对角线移动的 Dijkstra 算法

algorithm - Dijkstra 算法 = SSSP

java - 生成系列 {1,3,9,27,....} 的子集并按总和的升序排列子集

algorithm - 基本排序运行时间比较

c++ - 如何在 C++ 中用另一个较小的 vector 填充 vector ?

python - Python 中的 Kruskal 算法

java - 最短路径和 Dijkstra 算法