如何构建Dinic计算最大流量算法的Level Graph?

时间:2018-02-12 12:37:54

标签: algorithm graph max-flow

我正在阅读有关Dinic's Algorithm以解决最大流量问题的问题,并且该算法针对给定源S和接收器T的图G说明以下内容:

  1. 将每条边的流量设置为0
  2. 从Gf构建级别图GL(其中Gf是残差图)
  3. 在GL
  4. 中查找阻止流程
  5. 添加扩充流程并返回2
  6. 在网上进行一些研究之后,我了解如何计算GL,前提是T位于最后一级或T是距离S最远的跳数。

    但是我不明白当有些顶点远离S而不是T来自S时,如何做到这一点。

    例如,在下图中,我了解如何为图1中所示的残差图Gf构造GL但是我不确定如何绘制图2中所示的残差图的水平图GL。

    有人可以帮我理解这是怎么做的吗?

    图片:

    enter image description here

1 个答案:

答案 0 :(得分:0)

要计算水平图,在每一步中,您必须获取所有没有任何前驱的顶点,然后删除这些顶点以进行下一步。 在第二个例子中,您有以下内容:

  • 步骤0:S处于0级(其余图形是由顶点A,B,C,D,E,F,T引起的图形)
  • 步骤1:A和B处于1级(其余图形是由顶点C,D,E,F,T引起的图形)
  • 步骤2:C和D处于2级(其余图形是由顶点E,F,T引起的图形)
  • 步骤3:E处于3级(剩余图形是由顶点F和T引起的图形)
  • 步骤4:F处于等级4(并且剩余图表是单个节点T)
  • 步骤5:T处于5级

你不能在步骤3中取T,因为从F到T仍然存在弧。