[转]二分图的必须边

每次枚举节点,删除匹配边,若不存在另一匹配则表示其为必须边

MaxMatch(); //进行最大匹配
yes = 0;                       
for(i = 1; i <= n; i++) //验证match[i]与i是不是唯一匹配的
{
       x = match[i]; match[i] = -1;
       g[x][i] = 0;
       memset(flag, 0, sizeof(flag));
       if(!dfs(x))//如果dfs(x)==0即找不到,就表示是唯一匹配,即可输出!
       {
              match[i] = x;
              yes++;
              if(yes > 1) printf(" ");
              printf("(%c,%d)", 'A'+i-1, match[i]);    //输出字母和字母对应的数字
       }
       g[x][i] = 1;
}
if(!yes) printf("none");
|
|
原文地址:https://www.cnblogs.com/htfy/p/3080825.html