Shamissio
Профи
(998)
13 лет назад
Рандомайзер+рекурсия. И будет вам щастье, а вашим врагам (попавшим в лабиринт) горе)
Для генерации можно использовать простейшее построение случайного прохода, затем допостроения к нему таких же случайных ходов, продолжающееся до тех пор, пока не будет "забито" все пространство выделяемое под лабиринт.
Если лимит M и N небольшой, можно сделать рекурсиями. Устанавливаем точку входа. Сначала генерится основной ход. Движемся по клеточкам, "прогрызая" "ходы" в "камне", изменяя вектор движения случайно по или против часовой стрелке, в завасимости от значения случайного числа, и с проверкой касания края (если коснулись, то ставим выход) . С каждым шагом запоминаем координаты "прогрызенной точки" и увеличиваем уровень рекурсии. Итак, предположим, выход достигнут. Когда достигаем выхода, начинаем понижение уровня рекурсии с восстановлением координат вышеупомянутой точки, и в зависимости от случайности (например 50%) по тому-же алгоритму генерируем боковой ход. Тогда, при создании основного хода, концом генерации у нас служило достижение края лабиринта.
Источник: Denton & Bilge Xan