用未知形状填充网格

时间:2018-11-14 15:41:10

标签: arrays algorithm dictionary grid flood-fill

作为输入,我给出了0的2D网格,几乎没有-1个位置,这些网格指示无法填充的位置和某些形状的蓝图(例如在Tetris游戏中)

Forecast.select(Arel.sql("week(datum)+1 as kw, year(datum) as jahr, count(*) as anzahl, sum(dv) as dv")).group(Arel.sql('kw, jahr')).order(Arel.sql('jahr, kw'))

算法应输出 充满给定形状的网格始终必须使用所有形状一次 我可以旋转形状,并且应该始终给我可以填充的网格和形状。  我研究了像洪水填充算法这样的算法,但在这里我真的看不到使用它的方法。是否有可能通过暴力破解来实现?

1 个答案:

答案 0 :(得分:0)

这是我对如何解决这个问题的思考:

对于每种形状,似乎有4种可能的类型(包括原始形状) 例如:

1 1 1          1    1 1 1    1
1       ->     1        1    1
1          1 1 1,       1,   1 1 1 

现在可以说有s个形状,然后共有4s个形状。

4s形状中组合出一个图形,像这样:

  2
1 2 2
1 2 3 3
1 1 1 

1 1 1
1 2 3 3
1 2 2
  2 

1 1 1 3 3
1 2 2 2
1   2

(4s)^2 = 16s^2种可能性中任何此类数字。

实际上,它不只是16s^2,因为它不仅是形状的串联,还需要贪婪地寻找空闲空间并尝试将其容纳在其中。 :(

现在您手中有一个图形,在网格中寻找相同的形状。

例如寻找

1 1 1
1 2 3 3
1 2 2
  2 

我会寻找

0 0 0
0 0 0 0
0 0 0
  0 

在原始网格中。

这似乎是在原始矩阵中找到该图形的问题。

另请参阅this,这是关于查找形状的类似问题,但并不完全相同。