Skip to content

Instantly share code, notes, and snippets.

@Superty
Last active May 15, 2016 21:56
Show Gist options
  • Save Superty/acff722cf27da302ed12 to your computer and use it in GitHub Desktop.
Save Superty/acff722cf27da302ed12 to your computer and use it in GitHub Desktop.
finding maximum flow (ford-fulkerson)
int findMaxFlow()
{
int totalFlow = 0;
while(true)
{
int flow[MAX_N] = { }, prev[MAX_N] = { };
bool seen[MAX_N] = { };
flow[S] = inf;
int maxFlow, maxLoc;
while(true)
{
maxLoc = -1;
maxFlow = 0;
for(int i = 1; i <= N; i++)
{
if(!seen[i] && flow[i] > maxFlow)
{
maxFlow = flow[i];
maxLoc = i;
}
}
if(maxLoc == -1) break;
if(maxLoc == T) break;
seen[maxLoc] = true;
for(int i = 1; i <= N; i++)
{
if(flow[i] < min(maxFlow, cap[maxLoc][i]))
{
flow[i] = min(maxFlow, cap[maxLoc][i]);
prev[i] = maxLoc;
}
}
}
if(maxLoc == -1) break;
int pathCap = flow[T];
totalFlow += pathCap;
int curNode = T;
while(curNode != S)
{
int prevNode = prev[curNode];
cap[prevNode][curNode] -= pathCap;
cap[curNode][prevNode] += pathCap;
curNode = prevNode;
}
}
return totalFlow;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment