网络最大流
例题:
如果网络结构复杂,就得靠算法算出结果。
这里需要注意容量和流量的区别。其中f(u,v)的范围需要额外注意,是 0<= f(u,v) <= c(u,v),不会出现所谓的负流量。
网络流的三个性质:
1、容量限制: f[u,v]<=c[u,v]
2、反对称性:f[u,v] = -f[v,u]
3、流量平衡: 对于不是源点也不是汇点的任意结点,流入该结点的流量和等于流出该结点的流量和。
流量:实际流量。
容量:最大流量。
可行流:合理的流量。
最大流问题,就是求在满足网络流性质的情况下,源点 s 到汇点 t 的最大流量。
正向边:若边(u,v)的方向与该路径的方向一致,称正向边,方向不一致时称为逆向边。
增广路径:
若路径上所有的边满足:
1 所有正向边有:f(u,v) <c(u,v)。
2 所有逆向边有:f(u,v)>0。
也就是:增广路定义:在残量网络中的一条从s通往t的路径,其中任意一条弧(u,v),都有r[u,v]>0。
说的直白些,所谓增广路径,就是找到这样一条路径,其流量不满,未达到容量上限。
残留网络:
为了更方便算法的实现,一般根据原网络定义一个残量网络。其中r(u,v)为残量网络的容量,通俗地讲:就是对于某一条边(也称弧),还能再有多少流量经过。
r(u,v) = c(u,v) – f(u,v)
Gf 残量网络,Ef 表示残量网络的边集.
割
如果把V分成两个非空集合V1,V2,使Vs属于V1,Ve属于V2,则称V1,V2为截集或割。
解的一般步骤:
例题:
方法比较:
Ford-Fulkerson算法的是采用深度优先策略,是网络最大流的基础算法;
Edmonds-Karp算法是对顶点给标记的过程采用了广度优先的策略