最大流问题是一个很经典的问题,不少人对此也很熟悉,它可以等同于一个线性规划问题。下面给出最大流问题的一个基本描述:以下图所示,s是源点,t为汇点,每条边上数字的含义是边可以容许流过的最大流量。能够将边当作管道,0/3表明该管道每秒最多能经过3个单位的流量,0表明当前流量。最大流问题便是说,从s点到t点,最大容许流量是多少?web
那么最大流就能够表示为: 算法
Ford-Fulkerson是一种迭代的方法。开始时,对全部的u,v属于V,f(u,v)=0(这里f(u,v)表明u到v的边当前流量),即初始状态时流的值为0。在每次迭代中,能够经过寻找一个“增广路径”来增长流值。增广路径能够看作是从源点s到汇点t之间的一条路径,沿该路径能够压入更多的流,从而增长流的值。反复进行这一过程,直到增广路径都被找出为止。网络
举个例子来讲明下,如图所示,每条红线就表明了一条增广路径,当前s到t的流量为3。固然这并非该网络的最大流,根据寻找增广路径的算法咱们其实还能够继续寻找增广路径。.net
顾名思义,残留网络是指给定网络和一个流,其对应还能够容纳的流组成的网络。具体说来,就是假定一个网络G=(V,E),其源点s,汇点t。设f为G中的一个流,对应顶点u到顶点v的流。在不超过C(u,v)的条件下(C表明边容量),从u到v之间能够压入的额外网络流量,就是边(u,v)的残余容量(residual capacity),定义以下:cdn
r(u,v)=c(u,v)-f(u,v)htm
举个例子,假设(u,v)当前流量为3/4,那么就是说c(u,v)=4,f(u,v)=3,那么r(u,v)=1。blog
咱们知道,在网络流中还有这么一条规律。从u到v已经有了3个单位流量,那么从反方向上看,也就是从v到u就有了3个单位的残留网络,这时r(v,u)=3。能够这样理解,从u到v有3个单位流量,那么从v到u就有了将这3个单位流量的压回去的能力。图片
咱们来具体看一个例子,以下图所示一个流网络ci
这里介绍计算网络最大流的简便方法—标号法,此方法是Ford—Fulkerson 于1956年提出来的,它的原理是利用寻找增广链来不断改善可行流。 设μ是网络中 到 的一条链,规定 到 的方向为μ的方向。 μ上与μ的方向一致的弧称为前向弧,前向弧的集合记为μ+, μ上与μ的方向相反的弧称为后向弧,后向弧的集合记为μ-。it
参考:
http://blog.csdn.net/smartxxyx/article/details/9275177 http://blog.csdn.net/smartxxyx/article/details/9293665/ 以及: http://dec3.jlu.edu.cn/webcourse/t000048/yun/ch7_04.htm