为了更好的介绍Dinic算法,我们先来介绍最短增广路算法。
最短增广路算法
1、顶点的层次和层次网络
顶点的层次:在残留网络中,把从源点到顶点u的最短路径长度(该长度仅仅是值路径上边的数目,与容量无关),称为顶点u的层次,记为level(u)。源点Vs的层次为0。
将残留网络中所有的顶点的层次标注出来的过程称为分层。
注意:
(1)对残留网路进行分层后,弧可能有3种可能的情况。
1、从第i层顶点指向第i+1层顶点。
2、从第i层顶点指向第i层顶点。
3、从第i层顶点指向第j层顶点(j < i)。
(2)不存在从第i层顶点指向第i+k层顶点的弧(k>=2)。
(3)并非所有的网络都能分层。
层次网络:对残留网络进行分层后,删去比汇点Vt层次更高的顶点和与汇点Vt同层的顶点(保留Vt),并删去这些顶点相关联的弧,再删去从某层顶点指向同层顶点和低层顶点的弧,所剩余的各条弧的容量与残留网络中的容量相同,这样得到的网络就是残留网络的子网络,称为层次网络,记为G''(V'',E'')。
根据层次网络定义,层次网络中任意的一条弧<u,v>,有满足level(u)+1 == level(v),这条弧也叫允许弧。直观的说,层次网络是建立在残留网络基础之上的一张“最短路径图”。从源点开始,在层次网络中沿着边不管怎么走,到达一个终点之后,经过的路径一定是终点在残留网络中的最短路径。
阻塞流:设容量网络的一个可行流为f,当该网络的层次G''中不存在增广路(即从源点Vs到汇点Vt的路径时),称该可行流f为层次网络G''的阻塞流。
2、最短路增广路径的算法思想
最短增广路的算法思想是