求最大流的过程,就是不断找到一条源到汇的路径,然后构建残余网络,
再在残余网络上寻找新的路径,使总流量增加,然后形成新的残余网络,
再寻找新路径…..直到某个残余网络上找不到从源到汇的路径为止,最
大流就算出来了。
每次寻找新流量并构造新残余网络的过程,就叫做寻找流量的“增广路径”,也叫“增广”
各种算法的不同之处,也就是在寻找一条从源到汇的过程中进行优化而已
1) DFS
直接用dfs寻找增广路径,直到找不到路
这种算法十分简单,但复杂度高
本来2次就行了,但有可能要200次
2)Edmonds-Karp 最短增广路算法(BFS) O(n*m*m) (n是点数,m是边数)
利用bfs寻找一条增广路径
#include<iostream>
#include<queue>
#include<cstring>
#include<cstdio>
using namespace std;
const int ma