最短的两条不相交的路径;两个来源和两个目的地

时间:2012-08-11 15:00:06

标签: algorithm math optimization graph-theory

我们获得了未加权的无向图 G =(V,E) ,其中 | V | < = 40,000 | E | < = 10 6 。我们还给出了四个顶点 a,b,a',b'。有没有办法找到两个节点不相交的路径 a - > a' b - > b'这样他们的长度总和是最小的?我首先想到的是首先找到最短的路径 a - > a',将其从图表中删除,然后找到最短路径 b - > B'即可。我不认为这种贪婪的做法会起作用。

注意:在整个应用程序中, a b 是固定的,而 a' b'在每个查询中进行更改,因此使用预计算以提供有效查询的解决方案将更为可取。另请注意,只需要最小长度总和,而不是实际路径。

非常感谢任何帮助,想法或建议。非常感谢提前!

2 个答案:

答案 0 :(得分:11)

这可能会减少到最短的边缘不相交路径问题:

  1. (可选)将图表中的所有链折叠成单个边。这会产生较小的加权图(如果原始图中有任何链)。
  2. 通过用一对有向边代替每条边来将无向图转换为有向图。
  3. 将每个节点拆分为一对节点:一个节点只有原始节点的入口边缘,另一个节点只有其出局边缘。使用单个有向边连接每对节点。 (例如,下图中的节点 c 应分为 c1 c2 ;现在每个路径都包含节点 c 在原始图表中应该通过转换后的图形中的边缘 c1 - > c2 ;此处 x y < / strong>表示图中除节点 c )之外的所有节点。
  4. enter image description here enter image description here enter image description here

    现在,如果 a = b a' = b',您会遇到完全相同的问题在previous questionMinimum-cost flow problem中,可以通过为每条边等于1分配流量来解决,然后在a和b之间搜索最小成本流,其中flow = 2)。如果 a != b ,您只需创建一个公共源节点,并将 a b 连接到该节点。如果 a'!= b',请对公共目标节点执行相同操作。

    但如果 a != b a'!= b',则最低成本流量问题不适用。相反,这个问题可以解决为Multi-commodity flow problem


    我以前的(不正确的)解决方案是连接两对( a b )和( a' b) ')到公共源/目标节点,然后找到最小成本流。下图是此方法的反例:

    enter image description here

答案 1 :(得分:0)

这个怎么样? BFS(广度优先搜索)遍历a1 - &gt; a2并删除路径并计算BFS b1 - &gt; B2。现在重置图表并首先对b1-&gt; b2执行相同操作并删除路径,然后再执行a1-&gt; a2。 无论总和是多少都是答案。