我需要在下图中计算从A到B的两条路径,但是路径不能共享任何边的约束:
嗯,好吧,无法发布图片,这里是link。所有边缘都有正重;对于这个例子,我认为我们可以假设他们是平等的。我天真的方法是使用Djikstra的算法来计算第一条路径,如上图中的第二张图所示。
然后我从图中删除边缘并尝试计算第二条路径,该路径失败。 Djikstra,Bellman-Ford(或其他任何东西)的变体会计算出上面第三张图中显示的路径吗? (没有特殊知识和删除对向链接,就是我的意思)
答案 0 :(得分:0)
您正在寻找的是边缘不相交的路径。门格尔定理将为您提供最大数量的边缘不相交路径。要找到最短的一对,请查看Edge disjoint shortest pair algorithm:
- 为给定的顶点对运行最短对算法
- 用指向源顶点的单个弧替换最短路径的每条边(相当于两个相反方向的弧)
- 使上述每个弧的长度为负
- 运行最短路径算法(注意:算法应接受负成本)
- 擦除找到的两条路径的重叠边缘,并反转第一条最短路径上剩余弧线的方向,使其上的每个弧线现在指向接收器顶点。产生了所需的一对路径。
醇>