Я делаю программу, которая генерирует трехмерный лабиринт, и у меня возникли некоторые проблемы с алгоритмом создания. Для простоты взаимодействия это будет прямоугольная призма с одним входом и одним выходом.
Проблема заключается в фактическом кодировании алгоритма: я решил, что лучший способ сделать это - создать класс с именем MazeBlock
, который имеет шесть логических состояний (вверх, вниз, влево, вправо, внутрь, наружу), которые указывают, в каком направлении лабиринт может двигаться дальше. используя трехмерный массив MazeBlock
s, я хочу заполнить лабиринт, при каждой итерации заполнения проверяя блоки слева, справа, сверху, снизу, перед и за ним, чтобы увидеть, есть ли любое отверстие с той стороны, к которой можно прикрепить.
У меня уже есть тот, который будет делать края, размещая случайные открытые прорези внутри лабиринта. Все, с чем у меня проблемы, - это внутренняя часть лабиринта, обеспечивающая один вход, один выход и одно решение для его пересечения (однажды я решил "сложный" трехмерный лабиринт во всплывающей книге, сделав всего несколько шагов, противоположных предполагаемому направление.
Насколько я понимаю, я думаю, что у меня есть основная идея алгоритма, но я не знаю, как ее кодировать. Может ли кто-нибудь придумать для этого Java-алгоритм, который относительно решает задачу быстро?
Решение не должно использовать внешние библиотеки.