Advertisement
Guest User

Untitled

a guest
Jan 22nd, 2020
116
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.66 KB | None | 0 0
  1. #include <iostream>
  2. #include <climits>
  3. #include <queue>
  4. using namespace std;
  5.  
  6. int a[101][101];
  7.  
  8. void BFS(int x, int y, int p[], int d[], int n)
  9. {
  10.     d[x] = 0;
  11.     queue<int> Q;
  12.     Q.push(x);
  13.     while (!Q.empty())
  14.     {
  15.         int u = Q.front();
  16.         Q.pop();
  17.         for (int i = 1; i <= n; i++)
  18.         {
  19.             if ((d[i] == -1) && (i != u) && (a[u][i] != 0))
  20.             {
  21.                 d[i] = d[u] + 1;
  22.                 Q.push(i);
  23.                 p[i] = u;
  24.  
  25.             }
  26.         }
  27.     }
  28. }
  29.  
  30.  
  31. int main()
  32. {
  33.     freopen("input.txt", "r", stdin);
  34.     freopen("output.txt", "w", stdout);
  35.  
  36.     int n;
  37.     cin >> n;
  38.  
  39.     int** bw = new int* [n + 1];
  40.     for (int i = 1; i <= n; i++)
  41.     {
  42.         bw[i] = new int[n + 1];
  43.     }
  44.  
  45.     for (int i = 1; i <= n; i++)
  46.     {
  47.         for (int j = 1; j <= n; j++)
  48.         {
  49.             bw[i][j] = 0;
  50.         }
  51.     }
  52.  
  53.     for (int i = 1; i <= n; i++)
  54.     {
  55.         for (int j = 1; j <= n; j++)
  56.         {
  57.             cin >> a[i][j];
  58.         }
  59.     }
  60.  
  61.     int g = 0;
  62.     int sum = 0;
  63.     int m = n;
  64.     int f[101];
  65.     int d[101];
  66.     int p[101];
  67.     bool v = false;
  68.  
  69.     while (v == false)
  70.     {
  71.         for (int i = 1; i <= n; i++)
  72.         {
  73.             d[i] = -1;
  74.             p[i] = -1;
  75.         }
  76.         BFS(1, n, p, d, n);
  77.         if (d[n] == -1)
  78.             break;
  79.         else
  80.         {
  81.             int path[101];
  82.             int r = d[n];
  83.             int i = d[n];
  84.             path[i] = n;
  85.             int k = p[n];
  86.             while (p[n] != -1)
  87.             {
  88.                 i--;
  89.                 n = p[n];
  90.                 path[i] = n;
  91.             }
  92.             int min_e = 100000;
  93.             for (int i = 0; i < r; i++)
  94.             {
  95.                 if (a[path[i]][path[i + 1]] < min_e)
  96.                 {
  97.                     min_e = a[path[i]][path[i + 1]];
  98.                 }
  99.             }
  100.  
  101.             f[g] = min_e;
  102.             for (int i = 0; i < r; i++)
  103.             {
  104.                 a[path[i]][path[i + 1]] = a[path[i]][path[i + 1]] - f[g];
  105.                 bw[path[i]][path[i + 1]] = bw[path[i]][path[i + 1]] + f[g];
  106.             }
  107.  
  108.             n = m;
  109.             sum = sum + f[g];
  110.             g++;
  111.         }
  112.     }
  113.     cout << sum;
  114. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement