ma[i][j]表示i与j是否可以匹配
a与b两个数组用于记录匹配,例如a[i]表示i与b的a[i] 匹配
c用于记录访问点
ans表示匹配组合数
int sp(int u)
{
int v;
for(v=1;v<=m;v++)
{
if(ma[u][v]&&!c[v])
{
c[v]=1;
if(!b[v]||sp(b[v]))
{
b[v]=u;
a[u]=v;
return 1;
}
}
}
return 0;
}
int match()
{
int i,ans=0;
memset(a,0,sizeof(a));
memset(b,0,sizeof(b));
for(i=1;i<=n;i++)
{
if(!a[i])
{
memset(c,0,sizeof(c));
if(sp(i))ans++;
}
}
return ans;
}