Алгоритм Куна: различия между версиями
Перейти к навигации
Перейти к поиску
Ctrlalt (обсуждение | вклад) Нет описания правки |
Ctrlalt (обсуждение | вклад) Нет описания правки |
||
Строка 1: | Строка 1: | ||
vector<vector<int>> | bool dfs(vector<vector<int>> &graphA, int vFromA, vector<int> &visited, vector<int> &pairFromA) { | ||
visited[vFromA] = 1; | |||
for (int vFromB : graphA[vFromA]) { | |||
int &toFromA = pairFromA[vFromB]; | |||
for (int vFromB : | |||
int & | if (toFromA == -1 || !visited[toFromA] && dfs(graphA, toFromA, visited, pairFromA)) { | ||
if ( | toFromA = vFromA; | ||
return 1; | return 1; | ||
} | } | ||
} | } | ||
return 0; | return 0; | ||
} | } | ||
vector<int> kuhn(vector<vector<int>> &graphA, int vertexCountB) { | |||
pairFromA | vector<int> pairFromA(vertexCountB, -1); | ||
for (int vFromA = 0; vFromA < | |||
visited. | for (int vFromA = 0; vFromA < graphA.size(); vFromA++) { | ||
dfs(vFromA); | vector<int> visited(graphA.size()); | ||
dfs(graphA, vFromA, visited, pairFromA); | |||
} | } | ||
return pairFromA; | |||
} | } | ||
Версия от 00:04, 29 сентября 2022
bool dfs(vector<vector<int>> &graphA, int vFromA, vector<int> &visited, vector<int> &pairFromA) { visited[vFromA] = 1; for (int vFromB : graphA[vFromA]) { int &toFromA = pairFromA[vFromB]; if (toFromA == -1 || !visited[toFromA] && dfs(graphA, toFromA, visited, pairFromA)) { toFromA = vFromA; return 1; } } return 0; } vector<int> kuhn(vector<vector<int>> &graphA, int vertexCountB) { vector<int> pairFromA(vertexCountB, -1); for (int vFromA = 0; vFromA < graphA.size(); vFromA++) { vector<int> visited(graphA.size()); dfs(graphA, vFromA, visited, pairFromA); } return pairFromA; }