匈牙利(Hungary)算法

int xyl()
{
    int ans = 0;
    for (int i = 1; i <= n; i++)
    {
        memset(vis, 0, sizeof(vis));
        if (dfs(i)) ans++;
    }
}

bool dfs(int now)
{
    for (int i = head[now]; i; i = edge[i].nxt)
    {
        int to = edge[i].to;
        if (!vis[to])
        {
            if (!match[to] || dfs(match(to)))
            {
                match[to] = now;
                return true;
            }
        }
    }
    return false;
}

求最大匹配

bool Hungary(int x)
{
	for (int i=h[x];i;i=nxt[i])
	{
		int y=to[i];
		if (!vis[y])
		{
			vis[y]=true;
			if (!match[y] || Hungary(match[y]))
			{
				match[y]=x;
				return true;
			}
		}
	}
	return false;
}
posted @ 2026-03-24 11:47  msjing  阅读(6)  评论(0)    收藏  举报