【问题标题】:Tiling rectangle with fixed size tiles使用固定大小的瓷砖平铺矩形
【发布时间】:2011-12-16 19:41:21
【问题描述】:

我一直在努力为以下问题找到一个方便的解决方案:

假设我们有一堵给定尺寸的墙和 4 种尺寸为 4 x 2、2 x 2、2 x 1、1 x 1 的瓷砖。在墙的周边内有某些矩形区域不能平铺(即孔)。还有一种特殊类型的图块,它具有可变尺寸 A x B 且 A

找到符合以下约束的墙平铺:

  1. 相同大小的瓷砖不能以相同的对齐方式放置在另一个下方(即,出现在下面一行上的瓷砖必须移动,以使相邻的相同瓷砖之间没有看起来像交叉的间隙大小)
  2. 使用了最少数量的图块
  3. 超出矩形边界的图块将被修剪到边缘;这样产生的不完整的瓷砖将被破碎成更小的瓷砖;这可能涉及使用特殊的瓷砖,该瓷砖应始终紧挨着矩形的边缘或孔的边缘,无论这种情况可能出现在哪里

这是我迄今为止尝试过的:

  1. 我已经研究了使用多米诺拼贴解决此问题的算法,但大多数人似乎并不关心拼贴过程不会产生看起来像瓷砖交汇处的十字架的间隙。此外,对我来说,问题似乎有点不同,因为有更多类型的瓷砖,而且似乎不必完全填充矩形(小空间可能保留在边缘附近,这些空间将使用特殊瓷砖填充)
  2. 我尝试使用带有状态节点修剪的分支定界技术生成所有可能的切片,以便只探索那些不破坏约束的切片的状态,但这绝对不可扩展。李>
  3. 我还研究了打包算法,但据我所知,这可能会导致一定的平铺,其中有可以保留在墙内的小空间。

在探索上述技术时,我可能忽略了一些东西,或者没有足够的洞察力。

说了这么多,你们对解决这个问题的方法有什么提示或建议吗?

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

【问题讨论】:

    标签: algorithm math


    【解决方案1】:

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

    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
    

    【讨论】:

    • 这种方法的问题是填充剩余尺寸的复杂性。需要找到第一个位置,这样就不会形成十字(+)。当然,这取决于您完成第一次平铺的方式。由于您制作第一个平铺的方式,可能存在无法进行此类平铺的情况。也有孔彼此靠近的情况,这使您将它们视为增加搜索空间的联合情况。
    猜你喜欢
    • 2011-07-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-08
    • 2018-05-28
    • 2019-04-06
    相关资源
    最近更新 更多