#include <stdio.h>
#include <stdlib.h>
int g[10][10];
int chk[10];
int xm[10];
int ym[10];
int findpath(int u)
{
for(int i=0;i<10;i++)
{
if(g[u][i]==1&&!chk[i])
{
chk[i]=1;
if(ym[i]==-1||findpath(ym[i]))
{
xm[u]=i;
ym[i]=u;
return 1;
}
}
}
return 0;
}
int main()
{
int m;
scanf("%d",&m);
memset(xm,-1,sizeof(xm));
memset(ym,-1,sizeof(ym));
for(int i=0;i<m;i++)
{
int a,b;
scanf("%d%d",&a,&b);
g[a][b]=1;//由x集合中的a点到y集合中的b点有一条边
}
int ret=0;
for(int i=0;i<5;i++)
{
if(xm[i]==-1)
{
memset(chk,0,sizeof(chk));
}
if(findpath(i))
ret++;
}
printf("%d\n",ret);
}
二分图的最大匹配代码--匈牙利算法
于 2022-08-29 21:57:49 首次发布