hdu Matrix(二分图的最小路径覆盖)

#include <stdio.h>
#include <string.h>
#define maxn 150
int G[maxn][maxn];
int mark[maxn];
bool visit[maxn];
int n,m;
int path(int u)
{
	int i;
	for(i=1;i<=m;i++)
	{
		if(G[u][i] && !visit[i])
		{
			visit[i]=true;
			if(mark[i]==-1 || path(mark[i]))
			{
				mark[i]=u;
				return 1;	
			}	
		}	
	}	
	return 0;
}
int Max_Match()
{
	int i,ans;
	memset(mark,-1,sizeof(mark));
	ans=0;
	for(i=1;i<=n;i++)
	{
		memset(visit,false,sizeof(visit));
		if(path(i))
			ans++;	
	}	
	return ans;
}

int main()
{
	int i,j,a;
	while(scanf("%d",&n),n)
	{
		scanf("%d",&m);
		memset(G,0,sizeof(G)); 
		for(i=1;i<=n;i++)
			for(j=1;j<=m;j++)
			{
				scanf("%d",&a);
				if(a==1)	G[i][j]=1;	
			}	
		printf("%d\n",Max_Match()); 
	}	
	
} 

你可能感兴趣的:(hdu Matrix(二分图的最小路径覆盖))