#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