如何生成所有 Tetrominos 的列表?或者,更一般地说,我怎样才能生成仅限于多个单元格的多联骨牌子集?
3 回答
有很多方法可以做到这一点。我发现效果很好的一种选择是递归地和更普遍地考虑它。尤其是:
- 单个矩形是 1-omino。
- 对于任何 n-omino,您可以通过将一个块与 n-omino 中的任何块相邻来创建 (n+1)-omino。
这为您提供了一种列出所有可能的 n-ominos 的递归方式。但是,您需要小心,因为这会产生相同的 n-ominos 的多次旋转和平移。您可以通过选择一些参考坐标系然后平移 n-omino 以使其始终与该系统的轴齐平来解决此问题。一旦你完成了这项工作,你可以通过围绕轴旋转生成的 n-omino 来生成所有旋转,然后将其转换回规范位置。
N-omino 所需的最大网格是 NxN。生成所有然后排除旋转和平移。
您可以将其视为 N-1 步的路径跟踪算法。如果您从网格的左上角单元格开始并仅从那里向右或向下移动,您将避免大多数平移和旋转。如果我没记错的话,剩下的只有同构的 N-ominones。EG 由 Right-Down-Left 路径组成的 tetromino 与 Down-Right-Up 相同。
Tetrominos 是形状。计算机没有形状的直接表示,它们将数字表示为二进制信号。作为程序员,您决定如何将形状表示为数字。它们可以存储为位图、字符串、枚举...
如果你需要具体的帮助,你必须写一个更清晰的问题。
我也很好奇你为什么要生成一个包含 7 个已知的、不变的形状的列表。如果您正在编写俄罗斯方块游戏,您会将这 7 个形状硬编码为变量、常量或图像,而不是生成它们。