平铺矩形与固定大小的瓷砖

时间:2011-10-27 19:55:27

标签: algorithm math

我一直在努力寻找以下问题的便捷解决方案:

假设我们有一个给定尺寸的墙和4种尺寸为4 x 2,2 x 2,2 x 1,1 x 1的瓷砖。墙的周边有一些矩形区域,不能是平铺(即洞)。还有一种特殊类型的瓷砖,其具有可变尺寸A x B,其中A

找到符合以下限制的墙的平铺:

  1. 相同尺寸的瓷砖不能一个接一个地放置,具有相同的对齐(即,必须移动出现在下面一行上的瓷砖,使得没有间隙看起来像是相邻瓷砖的相邻瓷砖之间的交叉大小)
  2. 使用最少数量的图块
  3. 超出矩形边界的瓷砖将被修剪到边距;这样生产的不完整瓷砖将以较小的瓷砖打破;这可能涉及使用一个特殊的瓷砖,它应该始终位于矩形边缘或孔的边缘,无论何时出现这种情况
  4. 这是我到目前为止所尝试的内容:

    1. 我已经研究了使用多米诺骨牌解决这个问题的算法,但大多数人似乎并不关心平铺过程不会产生看起来像瓷砖相遇的十字架的间隙。此外,对我来说问题似乎有点不同,因为有更多类型的瓷砖,似乎矩形不必完全填充(小空间可能保持在边缘附近,将使用特殊瓷砖填充)
    2. 我尝试使用带有状态节点修剪的分支定界技术生成所有可能的倾斜,以便仅探索添加不破坏约束的切片的状态,但这绝对不可扩展。
    3. 我也研究了打包算法,但据我所知,这可能导致某些平铺,其中有小的未经处理的空间可以保留在墙的前提下。
    4. 在探索上述技术的过程中,我可能会忽略某些内容,或者没有足够的洞察力。

      说了这些话,你们有没有任何提示或建议来解决这个问题?

      This is an example of a tiling which respects constraints 1 and 3, but is not optimal

1 个答案:

答案 0 :(得分:0)

你需要最佳的平铺,还是你愿意接受“相当不错”?找到最佳解决方案可能非常困难。直觉上,我建议采用以下启发式方法:

1. Pretend there are no holes in the wall, tile with large tiles.

2. Remove all tiles which intersect with holes.

3. current_size = largest

4. For each empty space: tile as much as possible with current_size

5. current_size = the size just below current_size

6. return to 4