В МИРЕ НАУКИ Scientific American · Издание на русском языке № 2 · ФЕВРАЛЬ 1986 · С. 6274 |
Как быстрее всего дойти до некоторой цели, находящейся внутри лабиринта? Можно ли добраться до этого места и вернуться ко входу так, чтобы не проходить по одному и тому же коридору дважды? Можно ли избежать бесконечного кружения по лабиринту? Предположим, вы заблудились. Как найти путь назад из лабиринта, не углубляясь в него всё дальше и дальше? Исследуя эти проблемы, мы познакомимся с некоторыми превосходными цветными лабиринтами, созданными английской фирмой Minotaur Designs («Игрушки Минотавра»).
Вначале определим некоторые понятия. Входом называется то место, откуда вы начинаете путь; обычно вход располагается на периферии лабиринта. Целью назовём точку, в которую нужно прийти. Цель может находиться в любом месте лабиринта, в том числе на выходе. Узлом будем считать вход, цель, а также всякую точку, где коридор разветвляется или оканчивается тупиком. Отрезок пути между соседними узлами назовём ветвью. Маршрут это последовательность ветвей. Стенка это одна из двух сторон пути. Что такое стенка в подземном лабиринте, понятно и без пояснений. В садовом лабиринте стенкой может служить живая изгородь или невысокая насыпь, которые ограничивают путь с боков.
Некоторые лабиринты имеют узлы только на входе и в
Имея схему лабиринта, всегда можно найти прямой маршрут от входа к цели методом проб. Задача облегчится, если закрасить тупиковые ответвления. По мере закрашивания прямой маршрут вырисовывается всё более явно.
Что делать, однако, если вы входите в лабиринт, не имея ни его схемы, ни средств для того, чтобы нарисовать её? Как вы должны поступать, проходя через узлы, если не хотите заблудиться?
Один из методов состоит в том, чтобы в каждой узловой точке выбирать одно и то же направление. Например, можно всегда сворачивать на крайнюю правую ветвь. Если этот путь закончится тупиком, следует вернуться к узловой точке и выбрать следующую ветвь (если считать справа). Может оказаться, что в результате вы пройдете по каждой ветви дважды по одному разу в каждом направлении, но в конце концов вы доберётесь до цели. На обратном пути можно либо продолжать выбирать крайние правые ветви в каждом узле (и в этом случае вы, вероятно, пройдёте по новым областям лабиринта), либо каждый раз сворачивать на крайнюю левую ветвь (и тогда вы в точности повторите первоначальный маршрут). Метод выбора одной и той же правой или левой ветви я называю соответственно правилом правой или левой руки.
Правило руки применимо только к так называемым односвязным лабиринтам. Этот термин означает, что лабиринт не содержит замкнутых маршрутов, т.е. таких, которые образуют замкнутую петлю. Замкнутый маршрут возникает в том случае, если существует ограниченный стенками «остров», который не соединяется с другими стенками лабиринта. Лабиринт с одним или более островами называется многосвязным.
Первый многосвязный садовый лабиринт был сооружён в
Узлы пронумерованы от 1 (на входе) до 18 в
Проблема | Сеть для лабиринта в Чевнинге |
Правило руки для исследования многосвязного лабиринта не работает лишь в том случае, если в лабиринте существует замкнутый маршрут, окружающий вход или цель. Все другие замкнутые маршруты не создают никаких проблем. Предположим, вы приблизились к внутреннему острову (см. рисунок слева). Если вы в точности придерживаетесь правила левой или правой руки, вы не попадёте на замкнутый маршрут вокруг острова. Попасть на него и пойти по часовой стрелке вокруг острова можно лишь в том случае, если в узле a выбрать левую ветвь, а в следующем узле правую. Чтобы пойти вокруг острова против часовой стрелки, нужно в узле a свернуть на правую ветвь, а в следующем узле на левую. (Этот принцип мало полезен, если вы вошли в лабиринт и не знаете, кружите ли вы уже вокруг острова и окружена ли цель островом.)
С лабиринтом гораздо легче разобраться, если его схему топологически преобразовать к простой структуре, называемой сетью. В этой структуре все узлы сохранены, но ветви выпрямлены. На сети чевнингского лабиринта легко увидеть прямой маршрут 123451218, ведущий к цели. Подходящим является и другой маршрут, а именно 123671218, содержащий такое же количество узлов.
В сети прямой маршрут от входа до цели образует прямую линию. Тупиковые ветви отходят от прямого маршрута и не возвращаются к нему. Остров у входа порождает маршрут, который окружает входной узел. Он может пересекать прямой маршрут в одном узле с четырьмя ветвями или в двух узлах. Для исследования лабиринта с таким замкнутым маршрутом правило руки не годится. Другая петля окружает цель; она также сводит на нет полезность правила руки. Маршрут, окружающий вход или цель, можно нарисовать проходящим под прямым маршрутом. Внутренние острова порождают петли, которые пересекают прямой маршрут в одном, или в двух узлах. Отметим, что, войдя в такую петлю, вы, пользуясь правилом руки, в конце концов выйдете из неё и продолжите путь по прямому маршруту к цели. Так же можно сойти и с более сложных петель, которые имеют дополнительные пересечения с прямым маршрутом.
Основные |
Правила Тремо для |
Итак, правило руки не гарантирует успеха в достижении цели. Как же в таком случае исследовать лабиринт? Существует несколько методов, однако Э. Люка в книге «Récréations matématiques», изданной в 1882 году, отдаёт первенство некоему М. Тремо. Как видно из рисунка слева, где иллюстрируется этот метод, термины «старый узел» и «новый узел» означают, что данный узел соответственно был или не был пройден раньше. Входя в ветвь или покидая её, сделайте отметку на стене или на полу. Дойдя до нового узла, сверните на любую ветвь. Если вы зашли в тупик, вернитесь к предыдущему узлу. Если вы двигаетесь по новому пути и встречаете старый узел (в этом месте метки должны быть по меньшей мере на двух ветвях), возвратитесь к тому узлу, через который вы только что прошли. Если вы находитесь на пути, по которому уже проходили, сверните на новую ветвь. Если же это невозможно, выберите ветвь, по которой проходили один раз. Эта утомительная процедура может направить вас по длинному маршруту, но она позволяет избежать многих ловушек.
Предположим, вы вошли в лабиринт, прошли через ряд узлов, не делая никаких отметок, и обнаружили, что заблудились. Как быстрее всего вернуться ко входу, не углубляясь безнадёжно в лабиринт? В 1959 году О. Ор из Йельского университета изложил метод, позволяющий выпутаться из такой ситуации.
Представьте себе сеть лабиринта: вы находитесь в точке x и не только сбились с пути, но и забыли, через сколько узлов прошли (см. рисунок). Начиная с точки x, пройдите поочерёдно по каждой ветви до следующего узла. Входя в ветвь, нарисуйте на стенке или на полу
После этого пройдите по каждой незакрытой ветви дополнительно на один узел вперёд. Покидая точку x, отметьте единицей вход в ветвь. Когда вы покидаете эту ветвь в следующем узле (который вы посетили во время предыдущего поиска), пометьте единицей выходную узловую точку. (Теперь этот узел имеет две отметки.) Войдя в новую ветвь в этом узле, сделайте
Когда вы закончите изучение путей от точки x на расстояние двух узлов во всех возможных направлениях, вернитесь в x и начинайте изучать маршруты длиной три узла. Не забывайте отмечать единицей каждую ветвь, когда вы входите в неё или выходите. Заметьте, что, находясь в любом узле, вы всегда можете определить дорогу назад в точку x, сравнивая отметки на ветвях: ветвь, ведущая в точку x, имеет наибольшее число единиц. Рисунок иллюстрирует случай продвижения на расстояние трёх узлов. В данном случае вы натолкнётесь на вход, когда начнете продвигаться на расстояние четырёх узлов.
Фирма Minotaur Designs это небольшое предприятие, строящее полномасштабные лабиринты в Англии и других странах. А. Фишер, один из владельцев фирмы, прислал мне чертежи трёх оригинальных цветных лабиринтов, выпускаемых фирмой. Первый лабиринт, названный «A*maze*ment» (игра слов: maze лабиринт, amazement развлечение.
Лабиринт «A*maze*ment» | «Алфавитный суп» |
Вы входите в лабиринт по красному пути, ведущему в узел R, и должны достичь цели, расположенной в центре, пройдя через минимальное число узлов. В каждом узле вы должны менять цвет ветви. Например, если вы вошли в узел по голубому пути, нельзя уйти из него по другому голубому пути.
По сути дела лабиринт содержит гораздо больше узлов, чем те восемь, которые обозначены буквами. Например, узел I представляет собой в действительности два отдельных узла один, если вы приходите сюда по красной ветви, другой если по синей. Если рисовать для этого лабиринта сеть, нужно включить в неё один «синий» узел и один «красный».
Второй лабиринт имеет название «Алфавитный суп». Здесь также в каждом узле надо менять цвета ветвей. Каково здесь наименьшее число узлов, через которые надо пройти, чтобы достичь цели, расположенной в центре? Этот лабиринт устроен очень остроумно. Если вы попытаетесь определить путь, двигаясь от цели назад (обычный метод, применяемый любителями лабиринтов), то быстро потеряете дорогу. Из внутренней области лабиринта, представляющей квадрат, который обозначен буквами O, D, G и L, выбраться трудно. Многие пути, идущие от входа, образуют петли и возвращаются назад ко входу. После того как я обнаружил путь к внутренней области лабиринта, я нашёл несколько прямых маршрутов с 11 узлами (считая цель и рассматривая H в качестве первого узла). Гораздо больше времени потребовалось на то, чтобы обнаружить маршрут из 10 узлов. Я думаю, это минимальный маршрут.
Третий лабиринт «Мост гигантов» налагает на прохождение узлов дополнительные ограничения. Выбирая новую ветвь, следует придерживаться следующего порядка цветов: красный, голубой, жёлтый, зелёный. Войдя в узел по красной ветви, вы должны выйти из него по голубой. Зелёный вход предполагает красный выход
В центре лабиринта находится «мост», под которым проложены ветви. Какое минимальное число узлов надо миновать, чтобы пройти от входа 1 до цели 9. Решение Фишера (в виде сети) приведено на рис. 10. Заметьте, что здесь, как и в других цветных лабиринтах, сеть содержит гораздо больше узлов, чем непосредственно видны в самом лабиринте.
Изучение свойств сетей восходит к работам выдающегося математика XVIII века Леонарда Эйлера. Рассмотрим произвольную сеть. Узел называется чётным или нечётным в зависимости от того, сколько сходится в нём ветвей. Маршрут это любая последовательность ветвей, в которой никакая из ветвей не повторяется. Замкнутый маршрут заканчивается в том же узле, где и начинается. Назовём маршрут объемлющим, если, следуя по нему, можно обойти всю сеть, не проходя дважды по одной ветви.
Эйлер установил четыре основных правила, которые применимы к сетям.
Эти правила иллюстрируются следующим рисунком.
В первой сети число нечётных узлов чётно. Начав с одного из двух нечётных узлов, можно пройти по объемлющему маршруту, закончив путь в другом нечётном узле. Если начать с единственного чётного узла, потребуется два маршрута, чтобы пройти всю сеть целиком. Вторая сеть имеет дополнительную ветвь. Здесь число нечётных узлов также чётно. Поскольку нечётных узлов здесь больше двух, пройти по сети по объемлющему маршруту невозможно. Исследование всей сети требует по меньшей мере двух маршрутов. Два примера показаны на рисунке.
Часто (но не всегда) лабиринт содержит один нечётный узел на входе, а другой в цели. Если все остальные узлы чётные, можно пройти по всему лабиринту от входа до цели, не заходя в один и тот же коридор два раза. Если же лабиринт содержит хотя бы ещё один нечётный узел, по крайней мере по одной ветви придётся пройти дважды.
Исследование сетей, называемое сейчас теорией графов, имеет широкие приложения в математике, электротехнике, вычислительной математике, разработке транспортных маршрутов и многих других областях. Теория графов оперирует с сетями таких видов, которые приложимы к исследованию лабиринтов, за одним исключением: теория не разрешает иметь ветви, которые выходят из одного узла и, сделав петлю, возвращаются в этот же узел. Однако петли, встречающиеся в лабиринтах, можно видоизменить так, чтобы они удовлетворяли требованиям теории графов; для этого надо вставить в петлю один искусственный узел. В лабиринте этот узел не создаёт затруднений и предполагает одно решение: прекратить движение по ветви и вернуться к предыдущему узлу до того, как будет встречен следующий узел.
Теория графов предлагает элегантный способ исследования лабиринта, в котором надо найти минимальный маршрут. Начать следует с составления матрицы соединений между соседними узлами. Сеть лабиринта, изображенная рисунке ниже, имеет восемь узлов.
|
|
|
||||||||||||
Матрица, представляющая сеть лабиринта |
Ей соответствует квадратная матрица M с восемью элементами в каждой строке и в каждом столбце. Число соединений между соседними узлами является элементом матрицы. Приведем пример: от
Умножив матрицу M на саму себя, получим матрицу M2; с помощью неё можно определить, какие узлы соединены маршрутом, состоящим из двух ветвей. Вычисления производятся следующим образом. Умножьте первый элемент в первом столбце матрицы M на первый элемент в первой строке. Затем умножьте второй элемент в первом столбце на второй элемент во второй строке. Продолжайте умножать соответствующие элементы таким же способом. Закончив умножение, сложите все произведения. Это и будет
Теперь переходите к первому столбцу и второй строке. Перемножьте соответствующие элементы и сложите произведения. Это будет
Элементы матрицы M2, лежащие на линии симметрии (диагонали), указывают на число путей, по которым можно пройти от данного узла к каждому соседнему узлу и назад, проходя таким образом по одной ветви дважды. Остальные элементы отвечают путешествию от одного узла к другому по маршруту из двух ветвей.
Умножив M2 на M, получим матрицу M3; она позволяет определять число путей, по которым можно пройти от одного узла к другому и которые состоят из трёх ветвей. Например,
Анализ с использованием матриц может быть применён к более сложным лабиринтам, с которыми не так просто справиться с помощью пальца или карандаша. Вычисление всё более высоких степеней матрицы производится до тех пор, пока на месте элемента, соответствующего маршруту от
Если по лабиринту разрешено проходить только в одном направлении, соответствующая ему матрица видоизменяется. Например, если можно двигаться от