Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- double a[105][105];
- void Hungery(int n, int m){
- vector<double> u (n+1), v (m+1);
- vector <int> p (m+1), way (m+1);
- for (int i=1; i<=n; ++i) {
- p[0] = i;
- int j0 = 0;
- vector<double> minv (m+1, inf);
- vector<char> used (m+1, false);
- do {
- used[j0] = true;
- int i0 = p[j0], j1;
- double delta = inf;
- for (int j=1; j<=m; ++j)
- if (!used[j]) {
- double cur = a[i0][j]-u[i0]-v[j];
- if (cur < minv[j])
- minv[j] = cur, way[j] = j0;
- if (minv[j] < delta)
- delta = minv[j], j1 = j;
- }
- for (int j=0; j<=m; ++j)
- if (used[j])
- u[p[j]] += delta, v[j] -= delta;
- else
- minv[j] -= delta;
- j0 = j1;
- } while (p[j0] != 0.0);
- do {
- int j1 = way[j0];
- p[j0] = p[j1];
- j0 = j1;
- } while (j0);
- }
- vector<int> ans (n+1);
- for (int j=1; j<=m; ++j)
- ans[p[j]] = j;
- for (int j=1; j<=m; ++j){
- cout << p[j] << " ";
- }
- cout << endl;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement