覆盖网格中占用单元所需的最小矩形?

时间:2013-10-06 11:11:51

标签: algorithm

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

  • 每个矩形为Rx1或1xC
  • 矩形可以重叠
  • 被占用的细胞可被多次覆盖

示例:(x - 占用)

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

所需的最小矩形为3.(覆盖第1列,第2列,第3行)

有人能指出我正确的方向吗?这似乎很容易,但我无法找到一个强大的解决方案!

感谢。

1 个答案:

答案 0 :(得分:2)

考虑一个包含两个部分的图形,第一部分中的顶点与第二部分中的行和顶点相对应。部件i中的顶点1连接到部件j iff 2的顶点a[i][j] == 'x'。然后问题就减少到找到minimum vertex cover,例如最小的顶点集,图表的每个边缘至少有一个此集合的端点。由于图是二分图,因此可以在多项式时间内完成,请参阅this post