Комбинаторные алгоритмы для программистов

          

Поиск в глубину


При решении многих задач, касающихся ориентированных графов, необходим эффективный метод систематического обхода вершин и дуг орграфов. Таким методом является метод поиск в глубину. Метод поиска в глубину является основой многих эффективных алгоритмов работы с графами. Предположим, что есть ориентированный граф

Поиск в глубину
, в котором первоначально все вершины помечены меткой "
Поиск в глубину
". Поиск в глубину начинается с выбора начальной вершины
Поиск в глубину
орграфа
Поиск в глубину
, для этой вершины метка "
Поиск в глубину
" меняется на метку "
Поиск в глубину
". Затем для каждой вершины, смежной с вершиной
Поиск в глубину
и не посещаемой раньше, рекурсивно применяется поиск в глубину. Когда все вершины, которых можно достичь из вершины
Поиск в глубину
, будут рассмотрены, поиск заканчивается. Если некоторые вершины остались не посещенными, то выбирается одна из них и алгоритм повторяется. Этот процесс продолжается до тех пор, пока не будут обойдены все вершины орграфа
Поиск в глубину
.

Метод получил свое название - поиск в глубину, поскольку поиск не посещенных вершин идет в направлении вглубь до тех пор, пока это возможно. Например, пусть

Поиск в глубину
является последней посещенной нами вершиной. Выбираем очередную дугу
Поиск в глубину
(ребро), выходящую из вершины
Поиск в глубину
. Возможна следующая альтернатива: вершина
Поиск в глубину

помечена меткой "

Поиск в глубину
"; вершина
Поиск в глубину

помечена меткой "

Поиск в глубину
". Если вершина
Поиск в глубину
уже посещалась, то отыскивается другая вершина, смежная с вершиной
Поиск в глубину
; иначе вершина
Поиск в глубину
метится меткой "
Поиск в глубину
" и поиск начинается заново от вершины
Поиск в глубину
. Пройдя все пути, которые начинаются в вершине
Поиск в глубину
, возвращаемся в вершину
Поиск в глубину
, то есть в ту вершину, из которой впервые была достигнута вершина
Поиск в глубину
. Затем процесс повторяется, то есть продолжается выбор нерассмотренных дуг, исходящих из вершины
Поиск в глубину
, и так до тех пор, пока не будут исчерпаны все эти дуги.



Содержание раздела