Алгоритм Куна

Материал из Олимпиадное программирование в УлГТУ
Перейти к навигации Перейти к поиску
vector<vector<int>> g;
vector<int> pairFromA;
vector<int> visited;

bool dfs(int vFromA) {
    visited[vFromA] = 1;
    for (int vFromB : g[vFromA]) {
        int &to = pairFromA[vFromB];
        if (to == -1 || !visited[to] && dfs(to)) {
            to = vFromA;
            return 1;
        }
    }
    return 0;
}

void kuhn(int aSize, int bSize) {
    pairFromA.assign(bSize, -1);
    for (int vFromA = 0; vFromA < aSize; vFromA++) {
        visited.assign(aSize, 0);
        dfs(vFromA);
    }
}

Ссылки

Теория:

Код: