何谓二分图:如果一个图的所有顶点可以被分为两个集合,并且所有边的顶点恰好一个属于a集合,一个属于b集合,那么此图就是二分图
现在要求求一个图中二分图的最大匹配,这就像是谈恋爱,最理想的当然是人人都有一对,这样才和谐嘛~~
int book[101];
int match[101];
int a[101][101];
int n;
int dfs(int i);
int main()
{
int i,j,m,b,c,sum;
scanf("%d%d",&n,&m);
for (i=1;i<=m;i++)
{
scanf("%d%d",&b,&c);
a[b][c]=1;
a[c][b]=1;
}
for (i=1;i<=n;i++)
match[i]=0;
sum=0;
for (i=1;i<=n;i++)
{
for (j=1;j<=n;j++)
book[j]=0;
if (dfs(i)) sum++;
}
printf("%d\n",sum);
return 0;
}
int dfs(int i)
{
int j;
for (j=1;j<=n;j++)
{
if ((book[j]==0)&&(a[i][j]==1))
{
book[j]=1;
if ((match[j]==0)||(dfs(match[j])))
{
match[j]=i;
match[i]=j;
return 1;
}
}
}
return 0;
}