【问题标题】:How to compute the minimum number of rectangles required to cover occupied cells in a grid?如何计算覆盖网格中占用的单元格所需的最小矩形数?
【发布时间】:2013-10-13 01:05:20
【问题描述】:

给定一个 R×C 网格,其中某些单元格被占用,覆盖被占用单元格所需的最小矩形数是多少?

  • 每个矩形都是 R×1 或 1×C
  • 矩形可以重叠。
  • 占用的单元格可以覆盖多个矩形。

示例:

x - - - -
- - x - -
- x - x x
x - x - -

这里x- 分别标记已占用和未占用的单元格。

在这种情况下,最少需要 3 个矩形。(覆盖第 1 列、第 2 列和第 3 行。)

谁能指出我正确的方向?这似乎很容易,但我无法得出一个可靠的解决方案!

【问题讨论】:

  • 看看匈牙利算法解决分配问题。这构成了该算法的一部分。覆盖所有零所需的最少行数。

标签: algorithm


【解决方案1】:

考虑一个由两组顶点组成的二部图,第一组中的顶点对应于行,第二组中的顶点对应于网格的列。第一个集合中的一个顶点 i 连接到第二个集合中的一个顶点 j iff a[i][j] == 'x'

然后问题被简化为找到该图的minimum vertex cover,即最小的一组顶点,使得图的每条边至少有一个端点出现在该组中。由于图是二分图,因此可以在多项式时间内计算出最小顶点覆盖;见this post

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多