二分图最大匹配算法-匈牙利算法(Hungary)模板

#include
#include
const int N=1111;
int a[N][N],match[N],p[N],n;
int dfs(int u)
{
	for(int i=1;i<=n;i++)
	{
		if(!p[i]&&a[u][i])
		{
			p[i]=1;
			if(match[i]==-1||dfs(match[i]))
			{
				match[i]=u;
				return 1;
			}
		}
	}
	return 0;
}
int hungary()
{
	memset(match,-1,sizeof(match));
	int ans=0;
	for(int i=1;i<=n;i++)
	{
		if(match[i]==-1)
		{
			memset(p,0,sizeof(p));
			if(dfs(i))	ans++;
		}
	}
	return ans;
}

你可能感兴趣的:(模板)