对打印最小点覆盖方案的疑问[未解决]

起因:[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");

你可能感兴趣的:(最小点覆盖)