有向图中的K个边缘不相交路径

时间:2016-04-27 19:53:12

标签: algorithm directed-graph max-flow

在G =(V,E)和正整数k中给出两个顶点u和v,描述一个算法来判断是否存在从u到v的ak边缘不相交路径。如果决策问题的答案是肯定的,描述如何计算一组k个边缘不相交路径。

解决方案:运行从u到v的最大流量(给图G中的所有边加权为1,这样一条边可以只是从u到v的一条路径的一部分)并得到流量值。如果流量的值是k,那么我们将决策问题的答案定为是。

现在找到所有这些路径通过从你做BFS找到最小切割,因此我将得到顶点分区,它将顶点分成2组,每组最小切割。

那么我是否需要再次从你做一个DFS来寻找所有只有这些顶点的路径,这些顶点位于我从最小切割中得到的两个分区集中。

或者还有其他清洁方式吗?得到所有k个边缘不相交的路径。

1 个答案:

答案 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