每次枚举节点,删除匹配边,若不存在另一匹配则表示其为必须边
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"); | |