1 #include<vector> 2 #include<cstring> 3 #include<algorithm> 4 #define INF 0x7fffffff 5 #define MAX_V 210 6 7 using namespace std; 8 9 //用于表示边的结构体 10 struct edge 11 { 12 int to; //终点 13 int cap; //容量 14 int rev; //反向边 15 }; 16 17 int m,n; 18 bool used[MAX_V]; //DFS中用到的访问标记 19 vector<edge> G[MAX_V]; //用于保存图的邻接表,多组数据时要注意初始化 20 21 //向图中增加一条从_from到_to容量为_cap的边 22 void add_edge(int _from,int _to,int _cap) 23 { 24 edge temp; 25 temp.to=_to; 26 temp.cap=_cap; 27 temp.rev=G[_to].size(); 28 G[_from].push_back(temp); 29 temp.to=_from; 30 temp.cap=0; 31 temp.rev=G[_from].size()-1; 32 G[_to].push_back(temp); 33 } 34 35 //通过DFS寻找增广路 36 int dfs(int v,int t,int f) 37 { 38 if(v==t) 39 return f; 40 41 used[v]=true; 42 for(int i=0;i<G[v].size();i++) 43 { 44 edge &e=G[v][i]; 45 if(!used[e.to]&&e.cap>0) 46 { 47 int d=dfs(e.to,t,min(f,e.cap)); 48 if(d>0) 49 { 50 e.cap-=d; 51 G[e.to][e.rev].cap+=d; 52 return d; 53 } 54 } 55 } 56 57 return 0; 58 } 59 60 //求解从s到t的最大流 61 int max_flow(int s,int t) 62 { 63 int flow=0; 64 while(true) 65 { 66 memset(used,false,sizeof(used)); 67 int f=dfs(s,t,INF); 68 if(f==0) 69 return flow; 70 flow+=f; 71 } 72 }
原文:http://www.cnblogs.com/lzj-0218/p/3560153.html