之前一直在写分析,还没有认真介绍一下网络流,这篇是从网络流的定义,求最大流所常用的Dinic算法入手开始的。
参考:http://blog.csdn.net/lzoi_hmh/article/details/74940366
什么是网络流?
网络流的最大流是什么意思?
定义:带权的有向图G=(V,E),满足以下条件,则称为网络流图(flow network)。
(1)仅有一个入度为0的顶点s,称s为源点(source)或发点;
(2)仅有一个出度为0的顶点t,称S为汇点(sink)或沟或收点;
(3)每条边的权值都为非负数,称为该边的容量,记作c(i,j)。
网络流是指给定一个有向图,和两个点–源点S和汇点T,点之间有连边,
每条边有一个容量限制,可以看作水管,网络流就是指由S点流到T点的一个可行流。
最大流就是指所有可行流里面最大的流。
通俗的讲,就是由若干个运货点,一个是起点,一个是终点,有一些运货点由路相连,每条路有容量限制,走过那条路时运送的货物不能超过其中的容量限制,求最大流就是求从起点运送尽量多的货物到终点,到达终点的货物个数。
上图就是一个网络流。
对于网络流图G,每条边都给定一个非负数fij,这组数满足下面条件,称为网络的容许流(flow),记作f。
(1)0≤fij≤ c(i,j);
(2)除源点s和汇点t,其余顶点vi恒有:
∑fij=∑ fki
j k
即每个点流入和流出量相同;
(3)对于源点s和汇点t有:
∑fsi=∑ fjt=w
i j
w称为网络流的流量。
二.DINIC算法演示:
代码:。。。