- •Предисловие
- •Введение
- •Глава 1. Множества
- •§ 1. Множества н их спецификация
- •§ 2. Простейшие операции над множествами
- •X ∉ ø при любом х.
- •§ 3. Диаграммы Венна
- •§ 4. Подмножества и доказательства
- •§ 5. Произведения множеств
- •Глава 2. Отношения
- •§ 1. Основные понятия
- •§ 2. Графические представления
- •§ 3. Свойства отношений
- •§ 4. Разбиения и отношения эквивалентности
- •§ 5. Отношения порядка
- •§ 6. Отношения на базах данных и структурах данных
- •§ 7. Составные отношения
- •§ 8. Замыкание отношений
- •Глава 3. Функции
- •§ 1. Функции и отображения
- •§ 2. Обратные функции и отображения
- •§ 3. Мощность множеств и счетность
- •§ 4. Некоторые специальные классы функций
- •§ 5. Аналитические свойства вещественных функций
- •§ 6. Операции
- •Глава 4. Основные понятия арифметики
- •§ 1. «Малая» конечная арифметика
- •§ 2. «Большая» конечная арифметика
- •§ 3. Двоичная арифметика
- •§ 4. Логическая арифметика
- •Глава 5. Алгебраические структуры
- •§ 1. Алгебраические структуры и подструктуры
- •§ 2. Простейшие операционные структуры
- •§ 3. Кольца и поля
- •§ 4. Линейная алгебра
- •4.1. Векторные пространства о линейные преобразования.
- •§ 5. Решетка и булевы алгебры
- •§ 6. Замкнутые полукольца
- •Глава 6. Матрицы
- •§ 1. Матрицы и бинарные отношения на конечных множествах
- •§ 2. Матрицы над другими алгебраическими структурами
- •§ 3. Матрицы и векторные пространства
- •Глава 7. Теория графов
- •§ 1. Вводные понятия
- •§ 2. Маршруты, циклы и связанность.
- •§ 3. Планарные графы
- •3.1. Теоремы Эйлера и Куратовского.
- •3.2. Раскраска карт и графов.
- •§ 4. Структуры данных для представления графа
- •§ 5. Обход графа
- •5.2. Обход графа по глубине.
- •5.4. Остовные леса обходов по глубине и ширине.
- •§ 6. Ориентированные графы
- •6.2. Маршруты и связность в орграфах.
- •Глава 8. Языки и грамматики
- •§ 1. Основные понятия
- •§ 2. Грамматики с фразовой структурой
- •2.1. Основные определения.
- •§ 3. Контекстно-свободные языки
- •§ 4. Понятия грамматического разбора и грамматических модификаций
- •§ 5. Грамматики операторного предшествования
- •Глава 9. Конечные автоматы
- •§ 1. Общие понятия
- •§ 2. Конечные автоматы
- •§ 3. Регулярная алгебра
- •Глава 10.Компьютерная геометрия
- •§ 1. Системы координат для подмножеств r3
- •§ 2. Преобразования
- •§ 3. Кривые и поверхности
§ 5. Обход графа
5.1 Введение. Во многих задач, включающих графы, требуется обойти граф, т.е. чтобы каждая вершина графа «посещалась» или «обрабатывалась» только один раз. Таким образом, обход графа может быть представлен последовательностью вершин, соответствующих порядку, в котором они обрабатываются.
Если
и
– перестановка, то последовательность
определяет обход
.
Так как существует
различных перестановок
,
то должно быть
различных способов обхода графа с
вершинами. Другими словами, существует
способов полного упорядочения вершин.
Вершину
называют начальной вершиной обхода,
определяемого подстановкой
.
Мы опишем здесь только два метода обхода графов. Они могут быть полезны в приложениях. Оба метода применяются к упорядоченным графам и позволяют определить перестановку (или полное упорядочение вершин).
5.2. Обход графа по глубине.
Пусть
– упорядоченный граф. Выберем некоторую
начальную вершину
,
и положим
.
Далее вершины последовательности
определяются следующим образом:
первая вершина (смежная с
)
из списка смежности
,
– первая вершина из
,
которой нет ещё в
и т.д.,
первая вершина из
,
которой нет ещё в
.
При этом, если встречается вершина
такая, что все вершины из
уже содержатся в
,
то процесс повторяется из вершины
,
где
– последняя вершина в
такая, что
содержит вершины, не входящие в
.
Обход заканчивается, когда никакая
вершина из
не может быть достигнута из вершин
последовательности
.
Если
граф
связный, то описанный выше процесс
определяет обход
,
в противном случае – только одну из
компонент графа
(содержащую
).
Если граф
не является связным, то для получения
полного обхода
необходимо начинать процесс в каждой
связной компоненте графа
.
С помощью этого метода можно определить
число связных компонент графа. Для
каждого выбора начальной вершины в
связном графе получен единственный
обход, так что возможны все
обходов по глубине упорядоченного
связного графа. Если
имеет связные компоненты
,
где
,
то определены
обходов по глубине.
С
помощью следующей рекурсивной процедуры
можно найти обход по глубине. Здесь
– массив длины
,
все значения которого вначале равны 0;
устанавливается равным 1 для обозначения
того, что вершина
обработана.
П р и м е р 5.1.
Рассмотрим упорядоченный граф, изображённый на рис. 7.18. Первый обход по глубине из начальной вершины определяется следующим образом:
//
5.3.
Обход по ширине. Пусть
–упорядоченный граф. Выберем некоторую
начальную вершину
и предположим, что
П
ервые
членов
определяются следующим образом:
,
а
является -й вершиной из
,
не входящей в
.
Это исчерпывает
,
и процесс начинается над
и т.д. Обход прекращается, когда все
вершины,
Рис. 7.18
достижимые из , содержатся в . Замечания из п.5.2 о единственности, связности и числе возможных обходов также применимы к этому обходу. Обход графа по ширине можно найти с помощью следующей процедуры: играет ту же роль, что и прежде, а – оставшаяся часть в процедурах сложения и удаления ( add и delete соответственно)
П р и м е р 5.2. Первый обход по ширине графа в примере 5.1. с начальной вершины задаётся следующим образом:
//
