寻找流网络的最小切割

时间:2017-09-10 23:01:09

标签: algorithm graph flow ford-fulkerson minimum-cut

我正在尝试找到以下网络的最低​​限度 enter image description here

我使用以下算法:

  1. 运行Ford-Fulkerson算法并考虑最终残差图。

  2. 在残差图中找到可从源位置到达的顶点集。

  3. 从可到达顶点到不可到达顶点的所有边都是最小切边。打印所有这些边缘。

  4. 在第一步中,我的算法找到3条路径:

     - s->b->h->t  **value: 1** 
     - s->d->e->t  **value: 1**
     - s->c->h->i->m->d->g->t  **value: 0.5**
    

    因此最大流量(因此最小切割)等于2.5。

    然而,当我后来尝试从网络中消除上述路径时,我最终会得到这样的结果: enter image description here

    可到达的顶点是s,c和h,形成等于3.5的切口。

    我错过了什么?为什么我不能像往常一样获得最小切割?

2 个答案:

答案 0 :(得分:1)

每次增加残差图中边的容量时,都需要将相对边的容量增加相同的量。

示例图:

enter image description here

这是没有后向边的残差图和可以从S到达的顶点集(不构成最小切割):

enter image description here

使用最小割的正确残差图:

enter image description here

答案 1 :(得分:0)

我假设,您对残差图的定义是在以下情况下将边A-> B放在残差图中:

a)方向A-> B(又称前沿)的流量和容量之间存在一些差异 b)在方向B-> A(又名向后边缘)

方向存在一些流动

在此定义中,您的第2步是错误的。

要找到最小切割,您只能从头开始前进。现在,您可以将从开始可到达的顶点表示为集合R,并将其作为集合R'来表示。 现在切割是由R和R'之间的边缘完成的。 切割的大小在R和R之间流动。