【发布时间】:2019-04-25 09:13:24
【问题描述】:
简短说明:
我正在尝试用多米诺骨牌或换句话说用 2x1 和 1x2 瓷砖生成正方形的平铺。
有时我的算法会以某种方式放置垂直平铺,这使得无法填充最后一行。
我的当前方法是用 0 初始化一个网格(比如 8x8 网格)。 我在网格中用 1 表示水平图块的左半部分,用 2 表示右半部分。
因此垂直瓦片的上半部分是3,下半部分是4。
然后我从左到右遍历网格的每一行,在 0 的位置放一个图块:
- 每当我在网格的右边缘或右边的空间不为 0 时,我都会放置一个垂直平铺 (3)。
- 当我在底部边缘时,我(可以)只放置水平瓷砖。
- 如果以上都没有设置值,我会设置一个随机值(1 或 3)。
每当我放置一个瓷砖(1 或 3)时,我也会相应地为网格的相邻空间放置相应的一半。假设我在 (i,j) 上放了一个 1,然后在 (i,j+1) 上放了一个 2。
StoneMatrix = int[8][8];
for (int i = 0; i < StoneMatrix.length; i++) {
for (int j = 0; j < StoneMatrix.length; j++) {
if (StoneMatrix[i][j] != 0){
//field already set as a tile
continue;
}
if (i == StoneMatrix.length - 1) {
//bottom row
StoneMatrix[i][j] = 1;
StoneMatrix[i][j + 1] = 2;
continue;
}
if (j == StoneMatrix.length - 1) {
//right edge
StoneMatrix[i][j] = 3;
StoneMatrix[i + 1][j] = 4;
continue;
}
if (StoneMatrix[i][j + 1] != 0) {
//field to the right taken.
StoneMatrix[i][j] = 3;
StoneMatrix[i + 1][j] = 4;
continue;
}
StoneMatrix[i][j] = putOneOrThreeRandomly();
putCorrespondingAdjacentTile();
}
}
我觉得必须有一种简单或更容易的方法来生成这种平铺,但我还找不到。 我正在寻找的是一些来源,其中描述了这种生成算法,或者是一个简单的解决方案,可以修复我的错误。
【问题讨论】: