Algorithm 求流网络的最小割

Algorithm 求流网络的最小割,algorithm,graph,flow,ford-fulkerson,minimum-cut,Algorithm,Graph,Flow,Ford Fulkerson,Minimum Cut,我试图找到以下网络的最小割集 我使用以下算法: >P.> Ford Fulkson算法并考虑最终残差图。 在残差图中查找可从源访问的顶点集 从可达顶点到不可达顶点的所有边都是最小割边。打印所有这些边 在第一步中,我的算法找到3条路径: - s->b->h->t **value: 1** - s->d->e->t **value: 1** - s->c->h->i->m->d->g->t **value:

我试图找到以下网络的最小割集

我使用以下算法:

>P.> Ford Fulkson算法并考虑最终残差图。

  • 在残差图中查找可从源访问的顶点集

  • 从可达顶点到不可达顶点的所有边都是最小割边。打印所有这些边

  • 在第一步中,我的算法找到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

    但是,当我稍后尝试从网络中删除上述路径时,我的结果如下:

    可到达的顶点是s、c和h,它们形成一个等于3.5的切割


    我错过了什么?为什么我不能像通常那样遍历图以获得最小割

    我假设,残差图的定义是在残差图中放置边A->B,如果:

    a) a->B方向(也称为前缘)的流量和容量有些不同 b) 在方向b->A(也称为后缘)有一些流动

    在这个定义中,您的步骤2是错误的

    若要查找最小切割,只需从起点穿过前边缘。现在,您可以将可从开始到达的顶点表示为集合R,将其余顶点表示为集合R’。 现在,切割是由R和R'之间的边进行的。
    切割的大小是在R和R之间流动。

    每次增加残差图中某条边的容量时,都需要将另一条边的容量增加相同的量

    示例图:

    以下是不带后边的残差图和可从
    S
    到达的顶点集(不构成最小割):

    以及具有最小割集的正确残差图:


    “可到达的顶点是s、c和h,它们形成了一个等于3.5的切割。”–该切割的权重不是零吗?你能详细说明3.5是从哪里来的吗?@user3290797我在第二张图片上标记了BFS遍历的结果-这个剪切在真实网络中的值是3.5。我想我不明白你的意思,我给出的残差图到底出了什么问题?我通过删除列出的路径来生成残差图。然后以bfs方式遍历剩余图。你能详细解释一下吗?谢谢,这是我错过的一点!只有一件事-在您的示例中,边S->A的值应该是9,而A->S的值应该是1。@Simon谢谢,修正了。