在G =(V,E)和正整数k中给出两个顶点u和v,描述一个算法来判断是否存在从u到v的ak边缘不相交路径。如果决策问题的答案是肯定的,描述如何计算一组k个边缘不相交路径。
解决方案:运行从u到v的最大流量(给图G中的所有边加权为1,这样一条边可以只是从u到v的一条路径的一部分)并得到流量值。如果流量的值是k,那么我们将决策问题的答案定为是。
现在找到所有这些路径通过从你做BFS找到最小切割,因此我将得到顶点分区,它将顶点分成2组,每组最小切割。
那么我是否需要再次从你做一个DFS来寻找所有只有这些顶点的路径,这些顶点位于我从最小切割中得到的两个分区集中。
或者还有其他清洁方式吗?得到所有k个边缘不相交的路径。
答案 0 :(得分:3)
获得流程后,您可以按照流程提取边缘不相交路径。
起始节点将有一个k流离开k沿着k边缘。
对于每个边缘,您可以继续沿着输出流的方向移动以提取路径,直到达到v。您需要做的就是标记已经使用的边缘以避免重复边缘。
对每个k单位的流量重复,离开u以提取所有k个路径。
repeat k times:
set x to start node
set path to []
while x is not equal to end node:
find a edge from x which has flow>0, let y be the vertex at the far end
decrease flow from x->y by 1 unit
append y to path
set x equal to y
print path