图算法 网络流问题

来源:互联网 发布:权限控制数据库设计 编辑:程序博客网 时间:2024/06/07 21:28

一个有向图G = (V,E),边容量为c(v,w)。一个发点s,一个收点t。

最大流问题是确定s到t可以通过的最大流量。


左边为原图G,中间位流图Gf,表示算法任意阶段已经达到的流(初始为0),右边为残余图Gr,表示对于每条边还能再添加上多少流。

在每个阶段,寻找Gr中从s到t的一条路径(增长通路)约定,一旦注满一条边,则这条边就要从残余图中除去。当发现Gr中没有通路时算法终止。




算法终止时,正好5个单位的流是最大值。

问题在于,如果刚开始选择s,a,d,t,这条路径容纳3个单位,算法终止,但是不是最优。


为了解决这个问题,对残余图进行一些修改,对于流图中具有f(v.w)的每一边(v,w),将残余图中添加一条容量为f(v,w)的反向边(w.v)。


如果在这样的残余图中没有增长通路,可以证明,如果边的容量是有理数,那么该算法总以最大流结束。

虽然可以解决问题,但我们每次应该总选择容许在流中最大增长的增长路径,以减少寻找增长通路的次数。