11.4. ЛАБИРИНТ
671
с учетом его преобразования в требуемые конкретные представления. Здесь
рассматривается частный случай абстрактного представления прямоуголь-
ного лабиринта, в котором комнаты разбивают прямоугольник на квадрат-
ные клетки, имеющие левую, правую, верхнюю и нижнюю стороны, что и
отражено в обозначениях.
Что касается функции
isWay
, то ее назначение — нивелировать различия
проверки возможности перемещения по разным направлениям. В рамках ис-
ходной постановки задачи открытость двери не зависит от направления, в
котором она проходится. Из этого следует, что было бы ошибкой указывать
статус двери дважды, т. е. как различные атрибуты двух соединяемых дверью
комнат. Приведенное описание исходит из соглашения, о том, что указывает-
ся статус двери комнаты по направлениям вправо и вниз, а статус двух других
дверей вычисляется. Именно это и делает функция
isWay
. Для упрощения ал-
горитма этой функции, а также для последующей унификации вводятся ряд
и столбец фиктивных запертых комнат с нулевыми координатами, т. е. типы
TmaxX
и
TmaxY
описываются как отрезки целых, начинающиеся с нуля (а не
с единицы). В результате пограничные (из первой строки и первого столбца)
комнаты перестают быть исключительными.
Данное абстрактное представление позволяет решать задачу блуждания
в условиях плоского лабиринта (все комнаты и переходы между ними рас-
полагаются в одной плоскости) с дверями, ориентированными по сторонам
света
6
и допускающими переходы в обе стороны. Возможно модифициро-
вать представление для лабиринтов, которые имеют динамически изменяе-
мое состояние дверей (открыта или закрыта в зависимости от маршрута, чи-
сла пройденных комнат и других условий), но здесь это не делается.
Для работы с данным абстрактным представлением необходимо преду-
смотреть алгоритмы очистки (ликвидации стенок и пометок комнат)—
ClearRooms
и инициализации лабиринта (расстановка стенок) —
InitRooms
. В данном ре-
шении предлагается случайное размещение комнат: стенка выставляется с
вероятностью, равной константе
p
. Переменные
mX
и
mY
передаются про-
цедурам
ClearRooms
и
InitRooms
через общий контекст. Их значения долж-
ны быть заданы до вызова этих процедур. Отрисовка и стирание лабиринта,
т. е. построение и уничтожение его конкретного представления, намеренно
отделены от задания и ликвидации абстрактного представления, что мотиви-
6
Любой способ глобальной ориентации в лабиринте называется в теоретических работах
компасом. Так что ориентация по сторонам света — термин дискретной математики и не
имеет никакого отношения к фактической ориентации комнат.