<a target=_blank href="http://blog.csdn.net/dark_scope/article/details/8880547">点击打开链接</a>
#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
bool line[505][505],used[1000];
int girl[1000],n,m,k;
bool find(int x){
int j;
for (j=1;j<=m;j++){ //扫描每个妹子
if (line[x][j]==true && used[j]==false)
//如果有暧昧并且还没有标记过(这里标记的意思是这次查找曾试图改变过该妹子的归属问题,但是没有成功,所以就不用瞎费工夫了)
{
used[j]=1;
if (girl[j]==0 || find(girl[j])) {
//名花无主或者能腾出个位置来,这里使用递归
girl[j]=x;
return true;
}
}
}
return false;
}
int main()
{
while(scanf("%d",&k)&&k)
{
int i,all=0,aa,bb;
memset(line,0,sizeof(line));
memset(girl,0,sizeof(girl));
scanf("%d%d",&n,&m);
for(i=1;i<=k;i++)
{
scanf("%d%d",&aa,&bb);
line[aa][bb]=true;
}
for (i=1;i<=n;i++)
{
memset(used,0,sizeof(used)); //这个在每一步中清空
if(find(i)) all++;
}
printf("%d\n",all);
}
return 0;
}
开始把m,n搞反了,WA无数。。。最后还是过了。也算是又了解一个简单算法吧