男女匹配
输入样例:
5 4 14 //n,m,k 男个数,女个数,可以配对的组合
1 1 //男编号 女编号
1 2
2 3
3 2
4 2
4 3
4 4
5 4
5 2
5 3
3 3
2 4
1 3
2 1
输出样例:
4 //最大组合数
#include<stdio.h>
#include<string.h>
#include<iostream>
using namespace std;
int n,m,k,ans=0;
int link[101];
int visit[101];
int map[101][101];
int dfs(int i){
int j;
for(j=1;j<=m;j++){
if(map[i][j]==1 && visit[j]==0){
visit[j]=1;
if(link[j]==0 || dfs(link[j]==1)){
link[j]=1;//找到,加1
return 1;
}
}
}
return 0;
}
int main(){
int x,y,i;
scanf("%d%d%d",&n,&m,&k);
memset(map,0,sizeof(map));
memset(link,0,sizeof(link));
for(i=1;i<=k;i++){
scanf("%d%d",&x,&y);
map[x][y]=1;
}
for(i=1;i<=n;i++){//从每个顶点出发,依次遍历
memset(visit,0,sizeof(visit));
if(dfs(i)==1){//看是否能找到新的一对
ans++;
}
}
printf("%d",ans);
}