Advertisement
rdsedmundo

mtbom.cpp

May 22nd, 2014
235
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 0.94 KB | None | 0 0
  1. int fordFulkerson(int n, int s, int t) {
  2.         memset(fnet, 0, sizeof(fnet));
  3.         int flow = 0;
  4.         while (true) {
  5.                 memset(prev, -1, sizeof(prev));
  6.                 qf = qb = 0;
  7.                 prev[q[qb++] = s] = -2;
  8.                 while (qb > qf && prev[t] == -1)
  9.                         for (int u = q[qf++], v = 0; v < n; v++)
  10.                                 if (prev[v] == -1 && fnet[u][v] - fnet[v][u] < cap[u][v])
  11.                                         prev[q[qb++] = v] = u;
  12.                 if (prev[t] == -1)
  13.                         break;
  14.                 int bot = 0x7FFFFFFF;
  15.                 for (int v = t, u = prev[v]; u >= 0; v = u, u = prev[v])
  16.                         bot = min(bot, cap[u][v] - fnet[u][v] + fnet[v][u]);
  17.                 for (int v = t, u = prev[v]; u >= 0; v = u, u = prev[v])
  18.                         fnet[u][v] += bot;
  19.                 flow += bot;
  20.         }
  21.         return flow;
  22. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement