两个指定顶点之间的最短两条不相交路径

时间:2012-08-09 09:50:14

标签: algorithm optimization graph-theory dynamic-programming

给定加权无向图 G 和两个顶点 a,b ,我们希望找到两条路径 a - > b b - > a 使得它们不共享任何边缘,并且使得两个路径中的边缘权重之和最小。最多可以有 1,000 个顶点,最多可达 10,000 个边缘。

我最初尝试提出动态编程方法,但找不到这样的方法。任何想法/建议都将非常感激。

1 个答案:

答案 0 :(得分:7)

这是Minimum-cost flow problem。您可以为每条边等于1分配流量,然后在 a b 之间搜索最小成本流量,其中flow = 2。


有人可能会认为可以使用简单的算法来查找从 a b 的最短路径,从图中移除其边缘,然后找到另一条最短路径

这种方法并不总是最佳的。对于某些图表,它给出了一个很好的近似值。对于其他人来说,它可能会给出非常糟糕的解决方案:

enter image description here

此处在移除第一条最短路径(绿色)的边缘后,唯一剩余的路径(红色)非常重。该解决方案的成本是1 + 1 + 10 + 1 + 1 + 2 + 90 + 2 = 108。虽然最优成本是1 + 15 + 1 + 2 + 1 + 10 + 1 + 2 = 32。