Advertisement
Jasir

EdmondKarp

May 22nd, 2018
102
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 0.99 KB | None | 0 0
  1. #define mx 103
  2.  
  3. int dp[mx][mx], m_f, f, n, s, t, p[mx];
  4.  
  5. void augmentpath(int u, int minflow){
  6.     if(u==s){
  7.         f = minflow;
  8.         return;
  9.     }
  10.     else if(p[u]!=-1){
  11.         augmentpath(p[u], min(dp[p[u]][u], minflow));
  12.         dp[p[u]][u] -= f;
  13.         dp[u][p[u]] += f;
  14.     }
  15. }
  16.  
  17. void edmondkarp(){
  18.     m_f = 0;
  19.     while(1){
  20.         f = 0;
  21.         queue <int> q;
  22.         int dist[n+5];
  23.         q.push(s);
  24.         memset(dist, 0, sizeof dist);
  25.         memset(p, -1, sizeof p);
  26.         dist[s] = 1;
  27.         while(!q.empty()){
  28.             int u = q.front();
  29.             q.pop();
  30.             if(u==t) break;
  31.             for(int i=1;i<=n;i++){
  32.                 int v = i;
  33.                 if((dp[u][v]>0)&&(!dist[v])){
  34.                     dist[v] = 1;
  35.                     q.push(v);
  36.                     p[v] = u;
  37.                 }
  38.             }
  39.         }
  40.         augmentpath(t, 99999999);
  41.         //cout << f << endl;
  42.         if(f==0) break;
  43.         m_f+=f;
  44.     }
  45. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement