起因:[UVA 11419]SAM I AM
疑惑:
为什么对左边未匹配的点重新进行匹配之后,最小点覆盖涉及的点就是左边未标记的点加上右边已经标记的点。
代码如下:
printf("%d", ans);
memset(visx, 0, sizeof visx);
memset(visy, 0, sizeof visy);
for (int i = 1; i <= r; ++i)
{
if (matchr[i] == -1) dfs(i);
}
for (int i = 1; i <= r; ++i)
if (!visx[i]) printf(" r%d", i);
for (int i = 1; i <= c; ++i)
if (visy[i]) printf(" c%d", i);
printf("\n");