最大流问题是给一个有向网络,每条边都有一个容量,问从起点到终点最多能输出多少流。
这是一个模型,在处理某些问题合适建模,就能利用这些现成的算法,使得问题得到解决。
EK算法采用BFS找增广路,不断用流到这个点的最大流和现存容量的较小值进行更新,就这样每次找到一条更新整个图,然后添加反向弧,反向弧的容量与正向的和是等于整个容量,这个反向弧并不存在,只是为算法提供了修改的途径,有反悔的机会,添加反向边,更新残余量,直到没有路径可以到达。
Dinic算法,在残量网络上操作(残量网络是包含反向弧的网络),BFS建层次图,DFS找路径,找到阻塞流就算成功,不一定是最大流,然后更新整个网络,重复整个过程,算法效率优于EK算法。
最小费用最大流SPFA算法,利用费用建立一个网络,然后找费用和最少的一条路径(不考虑流量),然后在这条路径上找最小的容量边作为整条路的容量,计算价钱,然后当这条边的容量用了部分或全部之后添加反向弧(参数仍是费用,容量用完取消正向弧),继续重复上一个过程。