将彩色框分组为正方形的算法

Algorithm for grouping colored boxes into squares

假设一个二维 (width * height) 数组,其中每个元素都是一个彩色框。

盒子的数量是 n。所有框的颜色数限制为常数 c,并且 c <<< n.

现在对于给定的k,找到一种方法将这些框分组为更大的正方形,以便所有组(正方形)的计数最接近k,其中组项可以是 1, 4, 9, 16, 25, 36, ... 里面的盒子(这样它们就可以形成一个正方形)。

在每个组(正方形)中,所有元素的颜色必须相同。 单元素正方形是有效的。 方块不能重叠。

list all 2 by 2 squares of same colored boxes
while count of squares != k
  if count < k
      if possible to split largest square into smaller squares
          split
      else
          stop
  else 
      if possible to combine 4 small squares into one
          combine
      else
          stop