/* ** This is Edmond-Karp's algorithm for finding maximum flow ** in a undirected (flow)graph. Runtime Complexity: O(VE^2) */ #include <cstdio> #include <cstring> #include <vector> #include <queue> using namespace std; #define min(a,b) (a)<(b)?(a):(b) #define INF 2147483647 #define MAX 100 vector<int> adjList[MAX+7]; int V, capacity[MAX+7][MAX+7], parent[MAX+7]; int augment(int s,int v,int f) { if(v==s) return f; int u=parent[v], mf=augment(s,u,min(f,capacity[u][v])); capacity[u][v]-=mf, capacity[v][u]+=mf; return mf; } int process(int SRC,int SNK) { int out=0, u,v,mf; while(true) { queue<int> Q; Q.push(SRC); memset(parent,-1,sizeof parent); while(!Q.empty()) { u=Q.front(), Q.pop(); if(u==SNK) break; for(int i=0;i<(int)adjList[u].size();i++) { v=adjList[u][i]; if(parent[v]!=-1 || capacity[u][v]==0) continue; parent[v]=u, Q.push(v); } } if(parent[SNK]==-1) break; //then there is no more augmenting path, so algorithm terminates. mf=augment(SRC,SNK,INF), out+=mf; } return out; } int main() { /* code */ return 0; }
MaxFlow_Edmond-Karp's
Subscribe to:
Posts (Atom)