Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <climits>
- #include <queue>
- using namespace std;
- int a[101][101];
- void BFS(int x, int y, int p[], int d[], int n)
- {
- d[x] = 0;
- queue<int> Q;
- Q.push(x);
- while (!Q.empty())
- {
- int u = Q.front();
- Q.pop();
- for (int i = 1; i <= n; i++)
- {
- if ((d[i] == -1) && (i != u) && (a[u][i] != 0))
- {
- d[i] = d[u] + 1;
- Q.push(i);
- p[i] = u;
- }
- }
- }
- }
- int main()
- {
- freopen("input.txt", "r", stdin);
- freopen("output.txt", "w", stdout);
- int n;
- cin >> n;
- int** bw = new int* [n + 1];
- for (int i = 1; i <= n; i++)
- {
- bw[i] = new int[n + 1];
- }
- for (int i = 1; i <= n; i++)
- {
- for (int j = 1; j <= n; j++)
- {
- bw[i][j] = 0;
- }
- }
- for (int i = 1; i <= n; i++)
- {
- for (int j = 1; j <= n; j++)
- {
- cin >> a[i][j];
- }
- }
- int g = 0;
- int sum = 0;
- int m = n;
- int f[101];
- int d[101];
- int p[101];
- bool v = false;
- while (v == false)
- {
- for (int i = 1; i <= n; i++)
- {
- d[i] = -1;
- p[i] = -1;
- }
- BFS(1, n, p, d, n);
- if (d[n] == -1)
- break;
- else
- {
- int path[101];
- int r = d[n];
- int i = d[n];
- path[i] = n;
- int k = p[n];
- while (p[n] != -1)
- {
- i--;
- n = p[n];
- path[i] = n;
- }
- int min_e = 100000;
- for (int i = 0; i < r; i++)
- {
- if (a[path[i]][path[i + 1]] < min_e)
- {
- min_e = a[path[i]][path[i + 1]];
- }
- }
- f[g] = min_e;
- for (int i = 0; i < r; i++)
- {
- a[path[i]][path[i + 1]] = a[path[i]][path[i + 1]] - f[g];
- bw[path[i]][path[i + 1]] = bw[path[i]][path[i + 1]] + f[g];
- }
- n = m;
- sum = sum + f[g];
- g++;
- }
- }
- cout << sum;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement