Написать генератор «достаточно случайного» двумерного лабиринта, в котором стены представлены символом '#', а комнаты/коридоры — '.'. Программа вводит три числа через запятую — ширину и высоту лабиринта (нечётные), а также — должен ли он быть проходим из левого верхнего угла в правый нижний (1 — должен, 0 — нет). Выводится сам лабиринт. Разумеется, не такой, как в примере, тестирующая программа будет проверять следующтие свойства:
- в проходимом лабиринте не должно быть недоступных комнат,
- не должно быть сплошных блоков из стен или комнат размером 2×2
лабиринт может не иметь циклических/альтернативных путей (в том числе, может никогда их не иметь)
- для построения непроходимого дабиринта недостаточно заткнуть вход или выход в районе левого верхнего/правого нижнего углов (это можно получиться только случайно)
алгоритм не обязан быть «полностью» случайным (в примерах видно, что мой алгоритм любит ходить вдоль стен )
- (далее см. подсказки)
13,11,1
.#...#....... .###.#.#.###. ...#...#.#.#. ##.#####.#.#. .#.....#.#... .#####.#.#### ...#.#.#..... .#.#.#.#.###. .#...#.#.#... .#####.###.#. ...........#.
Подсказки (для алгоритма, который построил этот лабиринт):
- Общая идея: рыть (почти) случайный тоннель от входа до выхода, избегая докапывания до уже прорытых частей
- В спойлере — как сделать лабиринт непроходимым
- Обратите внимание на чётность/нечётность координат «длинных стен» и «коридоров»
And finally: Спойлер