Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Data Structures and Algorithms in C++ 2e (На ру...docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
2.37 Mб
Скачать

624 Глава 13. Алгоритмы графа

(a) (b)

(c) (d)

(e) (f)

Рисунок 13.7: Пример пересечения поиска типа «сначала вширь», где инцидент краев на вершине исследуются алфавитным порядком смежных вершин. Края открытия показывают с твердыми линиями, и взаимные края показывают с пунктирными линиями: (a) граф перед пересечением; (b) открытие уровня 1; (c) открытие уровня 2; (d) открытие уровня 3; (e) открытие уровня 4; (f) открытие уровня 5.

13.3. Пересечения графа 625

Одно из хороших свойств подхода BFS то, что в выполнении BFS

пересечение, мы можем маркировать каждую вершину длиной кратчайшего пути (с точки зрения числа краев) от вершины начала s. В частности если вершина v помещена на уровень i BFS, начинающимся в вершине s, то длина кратчайшего пути от s до v - я.

Как с DFS, мы можем визуализировать пересечение BFS, ориентируя края вдоль направления, в котором они исследуются во время пересечения, и отличая края раньше обнаруживал новые вершины, названные краями открытия, от тех, которые уже приводят к посещенным вершинам, названным взаимными краями. (См. рисунок 13.7 (f).) Как с DFS, края открытия формируют дерево охвата, которое в этом случае мы называем деревом BFS. Мы не называем края недерева «спинкой» в этом случае, однако, потому что ни один из них не соединяет вершину с одним из ее предков. Каждый край недерева соединяет вершину v с другой вершиной, которая не является ни предком v, ни его потомком.

У пересекающегося алгоритма BFS есть много интересных свойств, некоторые из которых мы исследуем в суждении, которое следует.

Суждение 13.14: Позвольте G быть ненаправленным графом, на котором пересекающееся начало BFS - был выполнен луг в вершине s. Тогда

• Пересечение посещает все вершины в связанном компоненте s

• Края открытия формируют дерево охвата T, из которого мы называем дерево BFS,

связанный компонент s

• Для каждой вершины v на уровне i, у пути дерева BFS T между s и v есть я

у краев и любого другого пути G между s и v есть, по крайней мере, я края

• Если (u, v) край, который не находится в дереве BFS, то числа уровня u и

v отличаются самое большее 1

Мы оставляем оправдание этого суждения как осуществление (Упражнение C-13.13).

Анализ продолжительности BFS подобен тому из DFS, который подразумевает следующий.

Суждение 13.15: Позвольте G быть графом с n вершинами и m краями, представленными со структурой списка смежности. Пересечение BFS G берет O (n + m) время. Кроме того, там существуйте O (n + m) разовые алгоритмы, основанные на BFS для следующих проблем:

•••

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

• Вычисление цикла в G, или сообщая, что у G нет циклов