122
ство вариантов просмотра. Иными словами, необходимо из множества А (исходное множество вари-
антов просмотра) выбрать такое подмножество В (рассматриваемых вариантов), что бы В было много
меньше множества А.
Например:
1. В задаче со сферой (часть 1) уменьшение числа просматриваемых точек достигается путем:
а) рассмотрения только одного из квадрантов (учет симметрии сферы);
б) рассмотрения точек, лежащих только вблизи границы сферы (если точка с максимальным зна-
чением координаты принадлежит сфере, то все точки с меньшей координатой также принадлежат
сфере, более того, значение координаты - количество точек, принадлежащих сфере).
2. В задаче “Ручей Моно” (см. часть 1) уменьшение числа просматриваемых участников можно
достичь путем отсева тех из них, которые заведомо не смогут достичь финиша.
3. В ряде задач, таких как “Покорение вершины”(3-я Всемирная олимпиада по информатике,
Греция, 1991г.) или “Ручей Моно”, поиск оптимального решения ведется путем просмотра вариан-
тов, начиная с наилучших к худшим. При получении на каком-либо из этапов решения, которое хуже
предыдущего, дальнейшее рассмотрение прекращается. Зачем рассматривать заведомо проигрышные
варианты?
4. Первоначально выбирают область, близкую к оптимальному решению. Затем рассматривают
варианты решения, близкие к оптимальному.
2.1.3 Алгоритм перебора вариантов в глубину с возвратом
Случай первый. Представим, что мы находимся внутри лабиринта и нам необходимо исследо-
вать его, т.е. полностью обойти лабиринт.
Случай второй. Знаменитая задача о восьми ферзях на шахматной доске.
Случай третий. Дана дорожная сеть между городами. Определить всевозможные пути дви-
жения из одного города в другой.
Эти задачи относятся к задачам переборного типа. В них необходимо определить все возможные
варианты, удовлетворяющие условию задачи. Для решения такого класса задач можно использовать
алгоритм перебора вариантов в глубину с возвратом.
Суть его заключается в следующем:
Просмотр начинается из начального состояния (вход в лабиринт, пустая доска, начальный го-
род). Для этого состояния определяются возможные варианты, в которые система может перейти
(учитывая условия задачи). Если таковых несколько, выбирается один из них. Происходит переход в
новое состояние, при этом отмечаем это состояние как просмотренное (гуляя по лабиринту, отмечаем
коридоры, в которых Вы побывали, чтобы не заблудиться). Для нового состояния системы, также оп-
ределяются возможные варианты, в которые она может перейти. В случае, если таких состояний нет,
то происходит возврат к предыдущему состоянию.
А L=0
Б В Г Д Е L=1
Ж З И ........................ L=2
Попробуем описать данный алгоритм, но сначала введем следующие понятия:
L - глубина (уровень) просмотра;
GL{}- массив возможных вариантов на уровне L.
В начальный момент L=0.