我们获得了未加权的无向图 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'在每个查询中进行更改,因此使用预计算以提供有效查询的解决方案将更为可取。另请注意,只需要最小长度总和,而不是实际路径。
非常感谢任何帮助,想法或建议。非常感谢提前!
答案 0 :(得分:11)
这可能会减少到最短的边缘不相交路径问题:
现在,如果 a = b 或 a' = b',您会遇到完全相同的问题在previous question(Minimum-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) ')到公共源/目标节点,然后找到最小成本流。下图是此方法的反例:
答案 1 :(得分:0)
这个怎么样? BFS(广度优先搜索)遍历a1 - > a2并删除路径并计算BFS b1 - > B2。现在重置图表并首先对b1-> b2执行相同操作并删除路径,然后再执行a1-> a2。 无论总和是多少都是答案。