这是一个二分匹配最最基础的题,完全套着模板来就可以,注意一下数组的初始化就可以了;
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int m,n;
int used[550],link[550],mat[550][550];
int dfs(int t)
{
int i;
for(i=1;i<=n;i++)
{
if(used[i]==0&&mat[t][i])
{
used[i]=1;
if(link[i]==0||dfs(link[i]))
{
link[i]=t;
return 1;
}
}
}
return 0;
}
int main()
{
int k,a,b,i;
while(scanf("%d",&k),k!=0)
{
memset(link,0,sizeof(link));
memset(mat,0,sizeof(mat));
scanf("%d%d",&m,&n);
while(k--)
{
scanf("%d%d",&a,&b);
mat[a][b]=1;
}
int sum=0;
for(i=1;i<=m;i++)
{
memset(used,0,sizeof(used));
if(dfs(i))
sum++;
}
printf("%d\n",sum);
}
return 0;
}