图算法 网络流问题

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

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

图算法 网络流问题_第1张图片

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

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

图算法 网络流问题_第2张图片

图算法 网络流问题_第3张图片

图算法 网络流问题_第4张图片

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

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

图算法 网络流问题_第5张图片

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

图算法 网络流问题_第6张图片

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

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

你可能感兴趣的:(数据结构与算法,最大流,图算法)