Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Методичка целая.docx
Скачиваний:
82
Добавлен:
12.11.2019
Размер:
5.04 Mб
Скачать

§ 5. Обход графа

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

Если и – перестановка, то последовательность

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

Мы опишем здесь только два метода обхода графов. Они могут быть полезны в приложениях. Оба метода применяются к упорядоченным графам и позволяют определить перестановку (или полное упорядочение вершин).

5.2. Обход графа по глубине.

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

Если граф связный, то описанный выше процесс определяет обход , в противном случае – только одну из компонент графа (содержащую ). Если граф не является связным, то для получения полного обхода необходимо начинать процесс в каждой связной компоненте графа . С помощью этого метода можно определить число связных компонент графа. Для каждого выбора начальной вершины в связном графе получен единственный обход, так что возможны все обходов по глубине упорядоченного связного графа. Если имеет связные компоненты , где , то определены обходов по глубине.

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

П р и м е р 5.1.

Рассмотрим упорядоченный граф, изображённый на рис. 7.18. Первый обход по глубине из начальной вершины определяется следующим образом:

//

5.3. Обход по ширине. Пусть –упорядоченный граф. Выберем некоторую начальную вершину и предположим, что

П ервые членов определяются следующим образом: , а является -й вершиной из , не входящей в . Это исчерпывает , и процесс начинается над и т.д. Обход прекращается, когда все вершины,

Рис. 7.18

достижимые из , содержатся в . Замечания из п.5.2 о единственности, связности и числе возможных обходов также применимы к этому обходу. Обход графа по ширине можно найти с помощью следующей процедуры: играет ту же роль, что и прежде, а – оставшаяся часть в процедурах сложения и удаления ( add и delete соответственно)

П р и м е р 5.2. Первый обход по ширине графа в примере 5.1. с начальной вершины задаётся следующим образом:

//