一、最大流性质:
对一个流网络G=(V,E),其容量函数为c,源点和汇点分别为s和t。G的流f满足下列三个性质:
容量限制:对所有的u,v∈V,要求f(u,v)<=c(u,v)。
反对称性:对所有的u,v∈V,要求f(u,v)=-f(v,u)。
流守恒性:对所有u∈V-{s,t},要求∑f(u,v)=0(v∈V)。
二、最小费用最大流:
在一个网络中每段路径都有“容量”和“费用”两个限制的条件下,此类问题的研究试图寻找出:流量从A到B,如何选择路径、分配经过路径的流量,可以在流量最大的前提下,达到所用的费用最小的要求。如n辆卡车要运送物品,从A地到B地。由于每条路段都有不同的路费要缴纳,每条路能容纳的车的数量有限制,最小费用最大流问题指如何分配卡车的出发路径可以达到费用最低,物品又能全部送到。
三、求最大流方法:
Ford-Fulkerson方法依赖于三种重要思想,这三个思想:残留网络,增广路径和割。Ford-Fulkerson方法是一种迭代的方法。开始时,对所有的u,v∈V有f(u,v)=0,即初始状态时流的值为0。在每次迭代中,可通过寻找一条“增广路径”来增加流值。增广路径可以看成是从源点s到汇点t之间的一条路径,沿该路径可以压入更多的流,从而增加流的值。反复进行这一过程,直至增广路径都被找出来,根据最大流最小割定理,当不包含增广路径时,f是G中的一个最大流。
找增广路的过程可以使用BFS、DFS、Dinic。(若要求最小费用最大流,只需每次寻找的增广路是最小费用即可。可用最短路算法。)
3.1 广度优先搜索
//广度优先搜索是从一个节点开始,再到自己的子节点,然后依次从子节点开始到自己子节点的子节点(这个方法就是先把自己的子节点放入队列,搜索完自己的子节点之后从队列中依次出队,从子节点开始新的搜索),因为目标是得到最小流(总的算最大流),所以中间的过程要有边的容量的比较,得到一条路径中最小的流。(虽然遍历了所有的节点,但是更新的却是最先找到的从源点到终点的那条路)