как сделать лабиринт с рекурсивным backtracker java - PullRequest
0 голосов
/ 22 апреля 2020

Я пытался написать рекурсивный бэк-трекер, используя его описание из Википедии, но я не могу написать asp, как написать его в java. Прямо сейчас я использовал удвоение for-l oop до go во всех ячейках и использовал Math.random (), чтобы помочь выбрать случайного соседа. Проблема в том, что я просто не знаю, как получить индекс соседа и добавить его в стек. Если бы кто-то мог объяснить, как получить индекс соседа, я думаю, что я смог бы закончить sh код.

1 Ответ

0 голосов
/ 22 апреля 2020

В двумерном массиве ячейка может иметь четырех соседей. Например, вот сетка 4x4:

     0   1   2   3
   -----------------
 0 |   |   | N |   |  
   -----------------
 1 |   | W | C | E |  
   -----------------
 2 |   |   | S |   |  
   -----------------
 3 |   |   |   |   |  
   -----------------

Ячейка, помеченная "C" в позиции (x = 2, y = 1), строка 1, имеет четырех соседей, которые я обозначил N , E, S и W. Если ячейка в Вас получает соседей по:

. Северный сосед находится на позиции (x, y-1). Восточный сосед находится на позиции (x+1, y). Южный сосед находится на позиции (x, y+1). Западный сосед находится в позиции (x-1, y)

Однако вы должны быть осторожны, потому что, если эти вычисления не будут охраняться, вы можете выполнить индексирование за пределами массива. Чтобы проверить направления, вам нужно что-то сделать например:

// check North neighbor
if (y > 0 && isNotOpen(a[y-1, x])) {
    ...
}

Проверка y > 0 не позволяет вам пытаться проверить ячейку a[x, -1], когда y == 0. Вы должны написать аналогичные проверки для других направлений, чтобы предотвратить неправильную индексацию.

...