网格元素在固定区域堆叠,具有固定的宽度和高度元素

时间:2017-01-17 01:17:41

标签: algorithm grid packing

我正在试图找出一种将一系列矩形和正方形堆叠或“打包”成3x16x2的块的解决方案,这样就不会有一个带有突出元素的块和不平衡的一端。在必须在另一条线上断开之前,块的宽度最多可以是3。图片链接如下。

我尝试过使用3种测量系统,宽度+高度,空间(元素占据的单个块的数量)+宽度,空间+高度。

网格可以使用5种可能的元素。图片链接如下。

使用S + H范例:

Name       |    Space x Height
Large           -   4 x 2  
Fullwidth       -   3 x 1
Horizontal      -   2 x 1
Vertical        -   2 x 2
Item(Single)    -   1 x 1

到目前为止,逻辑已经让我知道一个块总是3x16x2。如果占用的空间超过3,则意味着该块必须至少有2个块高,例如,如果有2个元素,总共4个空格,则其余元素必须仅占用2个空格。

为了简单起见,我排除了9x3的可能性。

  • 水平+项目

    水平= 2 x 1
    2个空格1高 没有填写一行,所以我们需要另一个元素 项目= 1 x 1
    2 + 1 = 3个空格
    1 = 1 = 1高 水平+项目= 3x1。

  • 项目+项目+项目

    1x1 = 1空格1高 1x1 + 1x1 = 2个空格1高 1x1 + 1x1 + 1x1 = 3个空格1高 Item + Item + Item = 3x1。

  • 水平+水平+垂直

    2x1 = 2空间1高 2x1 + 2x1 = 4空格1高 空间是>因此,块最后必须是6x2。有4个空格意味着必须添加元素,因此它们占用2个空格并且高2个 2x1 + 2x1 + 2x2 = 6个空格2 Tall

我不确定我是否接近解决方案或离开 首先放入元素的实际顺序无关紧要,因为我正在使用外部库将它们放在处理该逻辑的相干块中。
E.g Horizontal + Horizontal + Vertical == Horizontal + Vertical + Horizontal
如果有帮助,逻辑将用PHP编写。

Image link here

0 个答案:

没有答案