Краткое описание:
Я пытаюсь сгенерировать мозаику квадрата с домино или, другими словами, с тайлами 2х1 и 1х2.
Иногда мой алгоритм ставитвертикальная плитка таким образом, что делает невозможным заполнение последней строки.
Мой текущий подход состоит в инициализации сетки с нулями (скажем, сетка 8x8).Я представляю левую половину горизонтальной плитки с 1 и правую половину с 2 в сетке.
Соответственно, верхняя половина вертикальной плитки равна 3, а нижняя половина - 4.
ТогдаЯ прохожу каждый ряд сетки слева направо, и где 0 - я кладу плитку:
- Всякий раз, когда я нахожусь на правом краю сетки, или пространство справа не0, я положил вертикальную плитку (3).
- Когда я на нижнем краю, я (могу) только горизонтальные плитки.
- Когда ни один из вышеперечисленных не установил значениея помещаю случайное значение (1 или 3).
Всякий раз, когда я кладу плитку (1 или 3), я также помещаю соответствующую половину соответственно для соседнего пространства сетки.Скажем, я поставил 1 в (i, j), а затем поставил 2 в (i, j + 1).
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();
}
}
Я чувствую, что должен быть легкий или более простой способ генерировать такой лист, но я пока не смог найти.То, что я ищу, - это какой-то источник, где описан такой алгоритм генерации, или простое решение, которое исправляет мою ошибку.