【问题标题】:Filling a grid with unknown shapes用未知形状填充网格
【发布时间】:2023-03-22 12:42:01
【问题描述】:

作为输入,我给出了 0 的 2D 网格,其中很少有 -1 位置指示无法填充的位置和某些形状的蓝图(如俄罗斯方块游戏中)

 ex. of grid              ex. of shapes

 0  0  0  0  0  0  0        1 1 1     2 2 2     3 3
-1  0  0  0  0  0  0        1           2
-1  0  0  0  0  0  0        1
 0  0  0  0  0 -1  0
 0  0  0 -1  0  0  0

算法应该输出 充满给定形状的网格总是必须使用一次 我可以旋转形状,我应该总是得到可以填充的网格和形状。 我研究了诸如洪水填充算法之类的算法,但我并没有真正看到在这里使用它的方法。是否有可能与暴力破解不同?

【问题讨论】:

  • 对于通用形状的这些问题没有有效的解决方案。网格有多大?

标签: arrays algorithm dictionary grid flood-fill


【解决方案1】:

这是我对如何解决这个问题的想法:

对于每种形状,似乎有 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,这是一个类似但不完全相同的问题,关于寻找形状。

【讨论】:

    猜你喜欢
    • 2017-03-12
    • 2013-01-15
    • 2013-12-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-12
    • 1970-01-01
    相关资源
    最近更新 更多