就是给你一个管道图(可以类比许多现实的东西),要你能找到它的最大流量。
那么在这个时候,对于每个管道都有 当前流量f(i) 管道的容量c(i)!
这个时候可以给出一些东西的定义了:
1、残流网络
1)对于给定的一个流网络G及其上的一个流flow,网络G关于流flow的残流网络G*与G有相同的顶点集V,而网络G中的每一条边对应于G*中的1条边或2条边。
2)设(v,w)是G的一条边。
当flow(v,w)>0时,(w,v)是G*中的一条边,该边的容量为cap*(w,v)=flow(v,w);
当flow(v,w)<cap(v,w)时,(v,w)是G*中的一条边,该边的容量为
cap*(v,w)=cap(v,w)-flow(v,w)。
3)按照残流网络的定义,当原网络G中的边(v,w)是一条零流边时,残流网络G*中有唯一的一条边(v,w)与之对应,且该边的容量为cap(v,w)。
4)当原网络G中的边(v,w)是一条饱和边时,残流网络G*中有唯一的一条边(w,v)与之对应,且该边的容量为cap(v,w)。
5)当原网络G中的边(v,w)是一条弱流边时,残流网络G*中有2条边(v,w)和(w,v)与之对应,这2条边的容量分别为cap(v,w) -flow(v,w)和flow(v,w)。
6)残流网络是设计与网络流有关算法的重要工具。
2、增广路:
增广路定义:
在残量网络中的一条从
s
通往
t
的
路径,其中任意一条弧
(u,v)
,都有
r[u,v]>0
。
绿色的即为一条增广路。
增广路算法:每次用BFS找一条最短的增广路径,然后沿着这条路径修改流量值(实际修改的是残量网络的边权)。当没有增广路时,算法停止,此时的流就是最大流。