3.5. Поиск путей в графах и минимальных путей в орграфах
Определение. Матрицей связности графа G называется квадратная матрица S (G) порядка n, у которой sij = 1, если i = j или существует путь, соединяющий vi и vj, и sij = 0 – в противном случае.
Матрицу связности графа (орграфа) можно вычислить по следующей формуле:
S (G) = sign( E + A + A + … + A ), (3.8)
где E – единичная матрица, A – матрица смежности графа.
Определение. Матрицей достижимости орграфа G называется квадратная матрица T (G) порядка n, у которой t = 1, если вершина vj достижима из вершины vi и tij = 0 – в противном случае.
Определение. Матрицей сильной связности орграфа G называется квадратная матрица S (G) порядка n, у которой sij = 1, если вершина vi достижима из вершины vj и одновременно vj достижима из vi, и sij = 0 – в противном случае.
Матрицу достижимости и матрицу сильной связности орграфа можно вычислить по следующим формулам:
T (G) = sign ( E + A + A + …, + A ), (3.9)
S (G) = T (G) T (G) , (3.10)
где т – операция транспонирования, A – матрица смежности орграфа.
В матрице связности (сильной связности) графа (орграфа), элемент отличен от нуля тогда и только тогда, когда соответствующие вершины принадлежат одной компоненте связности (сильной связности).
При решении некоторых прикладных задач нередко возникает необходимость найти путь, соединяющий заданные вершины графа.
Рассмотрим алгоритм (Тэрри) поиска пути в связном графе, из вершины vi в вершину vj, где vi vj.
Исходя из вершины vi осуществлять последовательный переход от каждой достигнутой вершины к смежной ей вершине, по следующим правилам:
идя по произвольной дуге, всякий раз отмечать направление, в котором оно было пройдено;
исходя из некоторой вершины vk, всегда следовать только по дуге, которое не было пройдено или было пройдено в противоположном направлении;
для всякой вершины vk, отличной от vi, отмечать первую заходящую в vk дугу, если вершина vk встречается в первый раз;
исходя из некоторой вершины, vk, отличной от вершины vi, по первой заходящей в vk дуге идти лишь тогда, когда нет других возможностей.
Пример. Используя алгоритм Тэрри, найти путь из вершины v1 в вершину v5 в графе, изображенном на рис. 3.24.
Рис. 3.24
Поиск искомого пути будем осуществлять так, как будто мы ничего не знаем об этом графе. Например, что граф это схема лабиринта, а v5 это выход из него.
На рис. 3.25 показан один из возможных вариантов движения по графу, согласно алгоритму Тэрри. Пронумерованными дугами показана схема движения. Знаками « » помечены первые заходящие в вершины графа дуги. Указанная на рис.3.25 схема движения, соответствует пути: v1 v2 v1 v3 v4 v3 v5.
Замечание. Из полученного с помощью данного алгоритма пути всегда можно выделить простую цепь, соединяющую вершины vi и vj. Для данного примера это будет v1 v3 v5.
Рис. 3.25
Часто возникает задача поиска путей в орграфе с минимальным числом дуг.
Путь в орграфе из вершины vi в вершину vj, где vi ≠ vj , называется минимальным, если он имеет минимальную длину среди всех путей орграфа из vi в vj.
Для минимальных путей справедливы следующие утверждения:
1) Любой минимальный путь является простой цепью;
2) Пусть v1 v2 … vk, где v1 ≠ vk – минимальный путь. Тогда для любых номеров i, j таких, что 1≤ i < j ≤ k, путь vi vi+1 … vk также является минимальным.
Пусть G(V, X) – орграф. Введем следующие обозначения.
G(vi) = {v V | (vi,v) X} – образ вершины vi, т.е. множество вершин v орграфа в которые входят дуги, выходящие из вершины vi.
G (vi) = {v V | (v,vi) X} – прообраз вершины vi, т.е. множество вершин v орграфа из которых выходят дуги, заходящие в вершину vi.
G(V1) = G(vi) – образ множества вершин орграфа V1 V.
vi V1
G (V1) = G (vi) – прообраз множества вершин орграфа V1.
vi V1
Рассмотрим алгоритм (алгоритм фронта волны) поиска минимального пути с n вершинами из вершины vi в вершину vj орграфа.
Шаг1. Помечаем вершину vi индексом 0. Затем помечаем вершины, принадлежащие образу вершины vi, индексом 1. Множество вершин с индексом 1 обозначим FW1(vi). Полагаем k=1.
Шаг2. Если FW (v) = Ø или выполняется k = n – 1, vj FW (vi), то вершина vj не достижима из вершины vi, и работа алгоритма заканчивается. В противном случае переходим к шагу 3.
Шаг3. Если vj FW (vi), то переходим к шагу 4. В противном случае существует путь из вершины vi в вершину vj длины k, и этот путь является минимальным.
Последовательность вершин vi v1 v2 … v vj и есть минимальный путь из vi в vj. Вершины в этом пути определяются следующими соотношениями
v FW (vi) ∩ G (vj)
v FW (vi) ∩ G (v ) (3.11)
. . . . . . . . . . . . . . . . . . . . . . . .
v FW (vi) ∩ G¹(v2).
На этом работа алгоритма заканчивается.
Шаг 4. Помечаем индексом k+1 все непомеченные вершины, которые при-надлежат образу множества вершин с индексом k. Множество вершин с индексом k + 1 обозначим FW (v). Присваиваем k = k + 1 и переходим к шагу 2.
Замечание 1. Множество FW (v) в данном алгоритме обычно называют фронтом волны k – го уровня.
Замечание 2. Вершины v1,…, vk-1 из (3.11), вообще говоря, могут быть выделены неоднозначно. Эта неоднозначность соответствует случаю, когда существует несколько различных путей из вершины vi в vj.
Пример. Используя алгоритм фронта волны, определить минимальный путь из вершины v1 в вершину v6 в орграфе, заданном матрицей смежности, представленной табл.3.6.
Таблица 3.6
| v1 | v2 | V3 | v4 | v5 | v6 |
V1 | 0 | 0 | 0 | 1 | 1 | 0 |
V2 | 1 | 0 | 0 | 1 | 1 | 1 |
V3 | 1 | 1 | 0 | 1 | 1 | 1 |
V4 | 0 | 1 | 1 | 0 | 1 | 0 |
V5 | 1 | 1 | 1 | 1 | 0 | 0 |
V6 | 1 | 1 | 1 | 1 | 1 | 0 |
Шаг 1. Помечаем v1 индексом 0, т.е. v1 . По табл. 3.6 находим вершины, принадлежащие образу вершины v1. Это будут вершины v4 и v5. Их помечаем индексом 1, т.е. v4 , v5 . Это множество обозначаем через FW1(v1) = {v , v ). Полагаем k = 1.
Шаг 2. Т.к. FW1(v1) ≠ Ø, то переходим к шагу 3.
Шаг 3. v6 FW1(v1) следовательно, переходим к шагу 4.
Шаг 4. По табл.3.6 находим образ множества вершин, принадлежащих множеству FW1(v1). Это будет следующее множество {v2, v3, v5, v1, v4}. Непомеченные вершины этого множества будут v2 и v3. Их помечаем индексом 2, т.е. v , v . Это множество обозначаем FW2 (v1) = {v , v }. Переходим к шагу 2.
Шаг 2. Т.к. FW2(v1) ≠ Ø, то переходим к шагу 3.
Шаг 3. v6 FW2(v1) следовательно, переходим к шагу 4.
Шаг 4. По табл. 3.6 находим образ множества вершин, принадлежащих множеству FW2(v1). Это будет следующее множество {v1, v4, v5, v6, v2}. Непомеченных вершин в этом множестве только v6. Следовательно, FW3(v1) = v6. Переходим к шагу 2.
Шаг 2. Т.к. FW3(v1) ≠ Ø следовательно, переходим к шагу 3.
Шаг 3. v6 FW3(v1). Следовательно, существует путь из вершины v1 в вершину v6, и этот путь является минимальным. Найдем его из соотношений (3.11).
Определим следующее множество, используя первую строчку в (3.11).
FW2(v1) ∩ G-1(v6) = {v2, v3} ∩ {v2, v3} = {v2, v3}.
Выберем любую вершину из этого множества, например v3. Тогда определим следующее множество, используя вторую строчку в (3.11).
FW1(v1) ∩ G (v3) = {v4, v5} ∩ {v4, v5, v6} = {v4, v5}.
Выберем любую вершину из этого множества, например v5. Тогда искомый путь длины 3 из вершины v1 в вершину v6 будет следующим v1 v5 v3 v6.
Yandex.RTB R-A-252273-3
- Двузначная логика ………………………………………………5
- 2.5. Полнота и замкнутость……. ……………………………………….........50
- Комбинаторика…………………………………………………….87
- 1. Двузначная логика
- 1.1. Функции алгебры логики
- 1.2. Суперпозиция и формулы алгебры логики
- 1.3. Булева алгебра
- 1.4. Алгебра Жегалкина
- Нормальные формы логических функций
- Приведение логической формулы к днф
- Приведение днф функции к кнф
- Приведение кнф функции к днф
- 1.6. Минимизация функций
- 1.7. Полнота и замкнутость
- Закон двойственности
- 2.1. Элементарные функции
- 2.2. Основные свойства элементарных функций
- 2.3. Основные формы функций k – значных логик
- 2.4. Представление функций полиномами
- 2.5. Полнота и замкнутость
- 3. Элементы теории графов
- 3.1. Способы задания графов
- 3.2. Изоморфизм. Плоские графы. Реализуемость в r
- 3.3. Пути. Цепи. Циклы. Расстояния
- 3.4. Подграфы. Связность
- 3.5. Поиск путей в графах и минимальных путей в орграфах
- 3.6. Деревья и леса
- 3.7. Взвешенные графы
- Алгоритм Форда-Белмана.
- 4. Комбинаторика
- 4.1. Мощность множества. Правила суммы, произведения, степени
- 4.2. Размещения. Перестановки. Сочетания
- 4.3. Производящие функции