当前位置: 代码迷 >> 综合 >> 最大流--Ford-Fulkerson algorithm
  详细解决方案

最大流--Ford-Fulkerson algorithm

热度:23   发布时间:2023-12-24 21:25:42.0

笔记素材来源国科大卜东波老师

最大流其中一种解法是将其写成线性规化最后跑内点法便可以求出
在这里插入图片描述

先找初始解,然后进行改进,如果足够好,停止改进
初始解:设为零值流
在这里插入图片描述
那么如何改进呢,先找一个零值流,然后循坏找一条可行路径,并对其增流。
在这里插入图片描述
如左图,便是上述算法的执行结果,但失败地没有找到最大流,如何解决?
在这里插入图片描述
如图红色线所示出现错误的原因是,红色线不应该运(初始路径p不合适),那么就让红色的退回去1个单位流即可
为了实现退货这一功能,则要求加一相反的边(如下所示)
在这里插入图片描述
加了新的退货边,形成新的图就成为了所谓的剩余图。
在这里插入图片描述
那么什么是剩余图呢?它表征了原来的铁路在安排一个流后还能运输多少,即表征剩余运输能力,其次表示在当前流中还可以退回去多少,即反向边。

回到初始问题:如何通过剩余图来改善当前的流呢,答案是当前流加少构建的剩余图中的一条退贷边的路径,就得得改进后的新的流。如下图所示。在这里插入图片描述
核 心思想是在剩余图中找到一条路,如以下伪代码所示。
这便是Ford-fulkerson 算法
在这里插入图片描述
Demo 演示:
在这里插入图片描述
画出零值流对应的剩余图
在这里插入图片描述
找剩余图中中的一条路
在这里插入图片描述
可以最大增加8个单位的流
在这里插入图片描述
画出剩余图
在这里插入图片描述
在剩余图中找到新的路,新的路最多增加2个单位的流
在这里插入图片描述
新增两个单位的流
在这里插入图片描述
求出增流后的剩余图
在这里插入图片描述在剩余图中找到新的增广路,并增加最大6个单位的流
在这里插入图片描述

重复这样的操作,直至剩余图中再也找不到所谓从源点到汇点的增广路。
当然在新增流过程中,有可能操出原图的容量,此时做退货操作,如下图演示。
在这里插入图片描述
可以新增1个单位的流,但是要在超出容量的路径中反向退一个单位的流量
在这里插入图片描述

  相关解决方案