Как сгенерировать домино-тайлинг квадрата? - PullRequest
0 голосов
/ 25 апреля 2019

Краткое описание:

Я пытаюсь сгенерировать мозаику квадрата с домино или, другими словами, с тайлами 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();
    }
}

Я чувствую, что должен быть легкий или более простой способ генерировать такой лист, но я пока не смог найти.То, что я ищу, - это какой-то источник, где описан такой алгоритм генерации, или простое решение, которое исправляет мою ошибку.

1 Ответ

0 голосов
/ 02 мая 2019

Я «решил» проблему, установив логическое значение true, каждый раз, когда я попадаю в состояние, когда вы больше не можете правильно заполнять таблицу.

Затем в конце метода генерирования, если логическое значение равно false, сетка является действительной или если логическое значение равно true, я перезапускаю метод. Я думаю, что в основном грязный метод проб и ошибок.

Это не то решение, которое я хотел, но оно работает. Поэтому я оставляю этот вопрос открытым.

...