用未知形状填充网格
Filling a grid with unknown shapes
作为输入,我给出了 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
算法应该输出
填充给定形状的网格总是必须使用所有形状一次
我可以旋转形状,我应该总是得到可以填充的网格和形状。
我研究了像洪水填充算法这样的算法,但我并没有真正看到在这里使用它的方法。是否有可能以不同于暴力破解的方式来做到这一点?
这是我对如何解决这个问题的想法:
每种形状似乎有 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,这是一个关于查找形状的类似但不完全相同的问题。
作为输入,我给出了 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
算法应该输出 填充给定形状的网格总是必须使用所有形状一次 我可以旋转形状,我应该总是得到可以填充的网格和形状。 我研究了像洪水填充算法这样的算法,但我并没有真正看到在这里使用它的方法。是否有可能以不同于暴力破解的方式来做到这一点?
这是我对如何解决这个问题的想法:
每种形状似乎有 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,这是一个关于查找形状的类似但不完全相同的问题。