我需要一个算法的想法来解决以下问题(我已经尝试了一些个人的 解决方案,但它们似乎不是最佳的)
如果给定带有标记和未标记区域的表面(矩阵形式)和2个矩形 你可以在任何形式或位置操纵,找到可能的形状和位置 矩形使得它们覆盖所有标记区域,同时保持最小值 表面积可能。
答案 0 :(得分:3)
首先,找到包围整个区域的矩形。对此的算法是这样的(假设原点位于topleft):
For each marked spot in the matrix:
if spot.x < rectangle.left:
rectangle.left = spot.x
if spot.x > rectangle.right:
rectangle.left = spot.x
if spot.y < rectangle.top:
rectangle.left = spot.x
if spot.y < rectangle.bottom:
rectangle.left = spot.x
然后,找到这样的最大水平间隙:
largest_gap = -1
For each column in matrix:
last_marked_spot = 0, 0
For each spot in column:
if spot.marked:
if spot.x - last_marked_spot.x > largest_gap:
largest_gap = spot.x - last_marked_spot.x
last_marked_spot = spot
垂直间隙也是如此。然后检查哪个差距最大。
然后使用最大间隙作为分隔符将全包矩形分成两部分。最后一步是折叠两个矩形(使用顶部算法的反向)。