我正在尝试实施匈牙利算法,但我被困在第 5 步。基本上,给定一个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)
我显然选择了第 2 列(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)
现在我可以选择第 2 行或第 1 列,它们都有两个“剩余”零。如果我选择 col2,我最终会得到不正确的解决方案:
(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)