4

假设我有一个 2D int 数组..

int[][] board = new int[10][20];

public void initBoard()
{
    for(int r = 0; r < 10; r++)
        for(int c = 0; c < 20; c++)
            board[r][c] = 0;
}

0 表示没有棋子 棋子用 1-7 表示;

1 - Z 形

2 - S 形

3 - 线条形状

4 - T 形

5 - 盒子形状

6 - L 形

7 - 向后 L 形

用随机形状填充整个数组并且没有剩余空间的最佳方法是什么。

注意:我的游戏可以运行,我只是在尝试让它适应不同的东西,同时仍在使用俄罗斯方块游戏

4

2 回答 2

3

这实际上是您要问的一个非常复杂的问题。在计算机科学中,它被称为打包问题,并且有许多可能的算法和可能的方法,具体取决于您想要完成的确切性质。

在一般情况下,这个问题很难,真的很难,实际上,找到一个最优的一般解决方案是 NP-hard 的。有关更多信息,请查看麻省理工学院 Demaine 等人的研究论文。

于 2013-03-18T20:34:27.203 回答
1

这并不像看起来那么容易。事实上,这是一个NP-hard 问题包装矩形是类似的,你可以从一个更简单的问题开始。

于 2013-03-18T20:34:34.027 回答