n x n
的数字矩阵,我该如何找到最少数量的垂直+水平线条,以便覆盖矩阵中的零?在有人将这个问题标记为此问题的副本之前,请注意,那里提到的解决方案是不正确的,另外其他人也遇到了代码中的错误。
我不是在寻找代码,而是要理解如何绘制这些线条的概念...
编辑: 请勿发布简单(但错误)的贪心算法:给定以下输入:
(0, 1, 0, 1, 1)
(1, 1, 0, 1, 1)
(1, 0, 0, 0, 1)
(1, 1, 0, 1, 1)
(1, 0, 0, 1, 0)
我选择第二列,显然是第二个 (从0开始计数):
(0, 1, x, 1, 1)
(1, 1, x, 1, 1)
(1, 0, x, 0, 1)
(1, 1, x, 1, 1)
(1, 0, x, 1, 0)
现在我可以选择第二行或第一列,它们都有两个“剩余”的零。如果我选择第二列,就会得到这条路径上的错误解决方案:
(0, x, x, 1, 1)
(1, x, x, 1, 1)
(1, x, x, 0, 1)
(1, x, x, 1, 1)
(1, x, x, 1, 0)
正确解决方案需使用4行代码:
(x, x, x, x, x)
(1, 1, x, 1, 1)
(x, x, x, x, x)
(1, 1, x, 1, 1)
(x, x, x, x, x)