#include <iostream> #include <vector> using namespace std; vector graph[MAXN]; int capacity[MAXN][MAXN]; int max_flow(int source, int sink) { int residual[MAXN][MAXN]; memset(residual, 0, sizeof(residual)); while(1) { int prev[MAXN]; memset(prev, -1, sizeof(prev)); int actual[MAXN]; memset(actual, 0, sizeof(actual)); prev[source] = source; actual[source] = INF; queue q; q.push(source); while(!q.empty()) { int u = q.front(); q.pop(); for(int i = 0; i < graph[u].size(); i++) { int v = graph[u][i]; if(capacity[u][v] - residual[u][v] > 0 && prev[v] == -1) { prev[v] = u; actual[v] = min(actual[u], capacity[u][v] - residual[u][v]); if(v != sink) { q.push(v); } else { while(prev[v] != v) { u = prev[v]; residual[u][v] += actual[sink]; residual[v][u] -= actual[sink]; v = u; } goto end; } } } } end:; if(prev[sink] == -1) { int sum = 0; for(int i = 0; i < MAXN; i++) { sum += residual[source][i]; } return sum; } } }
Thursday, August 16, 2012
Maximum-Flow
Hi, I've just implemented in C++ and good and clean Edmonds-Karp Maximum-Flow implementation, hope it would be useful to you too
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment