Kuhn's algorithm
unknown
c_cpp
4 years ago
645 B
13
Indexable
class Kuhn
{
vector<int> used;
vector<int> r;
int n;
Kuhn(int n){
this->n = n;
used.resize(n + 1);
r.resize(n + 1);
}
bool dfs(int v)
{
if (used[v])
return false;
used[v] = true;
// Change the graph name to your own
for(auto to:g[v])
if (r[to] == -1 || dfs(r[to]))
{
r[to] = v;
return true;
}
return false;
}
int kuhn()
{
fill(begin(r), end(r),-1);
int ans = 0;
for (int v = 0; v < n; v++)
{
fill(begin(used), end(used), false);
if (dfs(v))
ans++;
}
return ans;
}
};Editor is loading...