View Code
1 #include<stdio.h> 2 #include<string.h> 3 int t,n,m,num,map[1001][1001],a[1001],b[1001]; 4 int dfs(int x) 5 { 6 int i; 7 for(i=1;i<=m;i++) 8 { 9 if(map[x][i]&&b[i]==0)//对其进行覆盖 10 { 11 b[i]=1; 12 if(a[i]==-1||dfs(a[i])) 13 { 14 a[i]=x;//形成新的交替链 15 return 1; 16 } 17 b[i]=0; 18 } 19 } 20 return 0; 21 } 22 int main() 23 { 24 while(scanf("%d",&t),t!=0) 25 { 26 int i,x,y; 27 28 scanf("%d%d",&n,&m); 29 memset(map,0,sizeof(map)); 30 memset(a,(int)-1,sizeof(a)); 31 for(i=1;i<=t;i++) 32 { 33 scanf("%d%d",&x,&y); 34 map[x][y]=1; 35 } 36 num=0; 37 for(i=1;i<=n;i++) 38 { 39 memset(b,0,sizeof(b));//每次初始化 40 if(dfs(i)) 41 num++;//记下匹配成功的组数 42 } 43 printf("%d\n",num); 44 } 45 return 0; 46 }