Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

графы

.pdf
Скачиваний:
27
Добавлен:
18.03.2015
Размер:
769.57 Кб
Скачать

D 1(V1) D 1(v) - прообраз множества вершин V1.

v V1

1.9.Нагруженные графы

Нагруженный граф − ориентированный граф D=(V,X), на

множестве дуг которого определена некоторая функция l : X R , которую называют весовой функцией.

Цифра над дугой (см. рис. 5)− вес дуги (цена дуги).

Рис. 5. Обозначения: для любого пути П нагруженного

ориентированного графа D через l(П) сумму длин дуг, входящих в путь П. (Каждая дуга считается столько раз, сколько она входит в путь П).

Величина l называется длиной пути.

Если выбрать веса равными 1, то придем к ненагруженному графу.

Путь в нагруженном ориентированном графе из вершины v в вершину w, где v w, называется минимальным, если он имеет наименьшую длину.

Аналогично определяется минимальный путь в нагруженном графе.

Введем матрицу длин дуг C(D)=[cij] порядка n, причем

l vi , v j ,

vi , v j X ,

cij

 

vi , v j X .

 

 

Свойства минимальных путей в нагруженном ориентированном

 

 

 

графе

1)

Если для дуги x X

l(x) 0 , то минимальный путь (маршрут)

является простой цепью;

 

2)

если

v1,v2 ,...,vk минимальный путь (маршрут) то для i,j :

1 i j k

путь (маршрут)

vivi 1...v j 1v j тоже является минимальным;

 

 

 

11

3) если v...uw − минимальный путь (маршрут) среди путей (маршрутов) из v в w, содержащих не более k+1 дуг (ребер), то v...u − минимальный путь (маршрут) из v в u среди путей (маршрутов), содержащих не более k дуг (ребер).

1.10. Деревья и циклы

Граф G называется деревом если он является связным и не имеет циклов.

Граф G называется лесом если все его компоненты связности - деревья.

Свойства деревьев:

Следующие утверждения эквивалентны:

1)Граф G есть дерево.

2)Граф G является связным и число его ребер ровно на 1 меньше числа вершин.

3)две различные вершины графа G можно соединить единственной (и при этом простой) цепью.

4)Граф G не содержит циклов, но, добавляя к нему любое новое ребро, получаем ровно один и притом простой цикл

Утверждение 4. Если у дерева G имеется, по крайней мере, 1 ребро, то у него найдется висячая вершина.

Утверждение 5.Пусть G связный граф, а v − висячая вершина в

G, граф G получается из G в результате удаления вершины v и инцидентного ей ребра. Тогда G тоже является связным.

Остовным деревом связного графа G называется любой его подграф, содержащий все вершины графа G и являющийся деревом.

Пусть G – связный граф. Тогда остовное дерево графа G должно содержать n(G)-1 ребер. Значит, для получения остовного дерева из графа G нужно удалить m(G) n 1 ребер.

Число v(G) m(G) n(G) 1 называется цикломатическим числом графа G.

12

2. Решение контрольных задач

2.1.Компоненты сильной связности ориентированного графа

Спомощью матрицы смежности найти компоненты сильной связности ориентированного графа D.

Cоставляем матрицу смежности A(D) размерности n n (n− количество вершин) для данного ориентированного графа: она состоит из нулей и единиц, номера строк – индексы вершин , из которых исходят дуги, номера столбцов – индексы вершин, в которые

дуги входят (если есть дуга, исходящая из вершины vi и входящая в vj, то элемент матрицы смежности, стоящий на пересечении i-той строки и j-того столбца равен 1, иначе – 0.).

Для того, чтобы выделить компоненты сильной связности, необходимо сначала найти матрицу достижимости T(D) ориентированного графа по первой формуле утверждения 3, затем находим матрицу сильной связности S(D) ориентированного графа (она должна быть симметрической) по второй формуле из того же утверждения.

Алгоритм выделения компонент сильной связности

1. Присваиваем p=1 (p − количество компонент связности),

S1 S(D) .

2.Включаем в множество вершин Vp компоненты сильной связности Dp вершины, соответствующие единицам первой строки матрицы Sp. В качестве матрицы A(Dp) возьмем подматрицу матрицы A(D), состоящую из элементов матрицы A, находящихся на пересечении строк и столбцов, соответствующих вершинам из Vp.

3.Вычеркиваем из Sp строки и столбцы, соответствующие вершинам из Vp. Если не остается ни одной строки (и столбца), то p- количество компонент сильной связности. В противном случае обозначим оставшуюся после вычеркивания срок и столбцов матрицу

как Sp+1, присваиваем p=p+1 и переходим к п. 2.

Пример

Выделим компоненты связности ориентированного графа, изображенного на рис. 6. В данной задаче количество вершин n=5.

13

Рис. 6.

Значит, для данного ориентированного графа матрица смежности будет иметь размерность 5×5 и будет выглядеть следующим образом

 

0

1

0

0

0

 

 

0

0

0

1

0

 

 

 

A(D)

0

1

0

0

0

.

 

 

 

 

 

 

 

 

0

0

1

0

0

 

 

1

0

1

1

0

 

 

 

Найдем матрицу достижимости для данного ориентированного графа по формуле 1) из утверждения 3:

0 0 0 1 0

 

 

 

 

 

 

 

0

0

1

0

0

 

 

0 0 1 0 0

 

 

 

 

 

 

 

0

1

0

0

0

 

 

 

 

 

sign A3 (D)

 

 

 

sign A2 (D)

0 0 0 1 0

 

,

 

0

0

1

0

0

 

,

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

0 1 0 0 0

 

 

 

 

 

 

 

0

0

0

1

0

 

 

0 1 1 0 0

 

 

 

 

 

 

 

0

1

0

1

0

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

0

1

0

0

0

 

 

 

 

 

 

 

 

 

 

 

0

0

0

1

0

 

 

 

 

 

 

 

 

 

sign A4 (D)

 

 

 

 

 

 

 

 

 

 

 

0

1

0

0

0

 

,

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

0

0

1

0

0

 

 

 

 

 

 

 

 

 

 

 

0

0

1

1

0

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Следовательно,

1 0

0

0

0

 

0 1 0 0

0

 

0 0 0 1

0

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

0

0

0

 

0 0 0 1

0

 

0 0

1

0

0

 

0 1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

0

1

0

0

 

0

1

0

0

0

 

0

0

0

1

0

 

T (D) sign

0

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

0

1

0

 

0 0 1 0

0

 

0 1

0

0

0

 

0 0

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

0

0

0

1

 

1

0

1

1

0

 

0

1

1

0

0

 

 

0

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

14

0 0 1

0

 

0

0 1

0

0

0

1 1 1 1 0

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

0 1 0

0

 

0

0 0

0

1

0

 

0 1 1 1 0

 

 

 

0 0 1

0

 

0

 

0 1

0

0

0

 

 

0 1 1 1 0

.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

0 0 0

1

 

0

0 0

1

0

0

0 1 1 1 0

 

 

 

 

 

0

 

 

 

 

 

 

 

 

1 1 1 1 1

 

 

0 1 0

1

 

 

0 0

1

1

0

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Таким образом, матрица сильной связности, полученная по

формуле 2) утверждения 3, будет следующей:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

1

1

1

1

0

 

 

1

0

0

0

1

 

 

1

0

0

0

0

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

0

1

1

1

0

 

 

1

1

1

1

1

 

0

1

1

1

0

 

 

S (D)

0

1

1

1

0

 

&

1

1

1

1

1

0

1

1

1

0

.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

0

1

1

1

0

 

 

1

1

1

1

1

 

 

0

1

1

1

0

 

 

 

 

1

1

1

1

1

 

 

0

0

0

0

 

 

0

0

0

0

1

 

 

 

 

 

 

1

 

 

 

Присваиваем p=1 S1 S(D) и составляем множество вершин первой компоненты сильной связности D1: это те вершины, которым соответствуют единицы в первой строке матрицы S(D). Таким образом, первая компонента сильной связности состоит из одной вершины V1 v1 .

Вычеркиваем из матрицы S1(D) строку и столбец, соответствующие вершине v1, чтобы получить матрицу S2(D):

 

 

 

1

1

1

0

 

 

 

 

 

1

1

1

0

 

 

S2

(D)

 

 

.

 

1

1

1

0

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

0

0

0

1

 

 

 

 

 

 

 

Присваиваем p=2. Множество вершин второй компоненты связности составят те вершины, которым соответствуют единицы в

первой строке матрицы S2(D), то есть V2 v2 , v3,

v4 . Составляем

матрицу смежности для компоненты сильной

связности D2

исходного графа D − в ее качестве возьмем подматрицу матрицы A(D), состоящую из элементов матрицы A, находящихся на пересечении строк и столбцов, соответствующих вершинам из V2:

 

0

0

1

 

 

 

 

 

 

A(D2 )

1

0

0

.

 

0

1

0

 

 

 

15

Вычеркиваем из матрицы S2(D) строки и столбцы, соответствующие вершинам из V2 ,чтобы получить матрицу S3(D),

которая состоит из одного элемента:

S3(D) 1

и присваиваем p=3. Таким образом, третья компонента сильной связности исходного графа, как и первая, состоит из одной вершины

V3 v5 .

Таким образом, выделены 3 компоненты сильной связности

ориентированного графа D:

 

D1:

D2:

D3:

2.2.Расстояния в ориентированном графе

Спомощью алгоритма фронта волны найти расстояния в ориентированном графе D: диаметр, радиус и центры.

Пусть D (V , X ) ориентированный граф с n 2 вершинами и v,w

(v w) – заданные вершины из V.

Алгоритм поиска минимального пути из v в w в

ориентированном графе

(алгоритм фронта волны).

1)Помечаем вершину v индексом 0, затем помечаем вершины образу вершины v индексом 1. Обозначаем их FW1 (v). Полагаем k=1.

2)Если FWk (v) или k=n-1, и одновременно w FWk (v) то вершина w не достижима из v . Работа алгоритма заканчивается.

В противном случае продолжаем:

3)Если w FWk ( ) , то переходим к шагу 4.

В противном случае мы нашли минимальный путь из v в w и его длина равна k. Последовательность вершин

16

vw1w2w3...wk 1w

wk 1 FWk 1(v) D 1(w)

wk 2 FWk 2 (v) D 1(wk 1)

.....................................

w1 FW1(v) D 1(w2 )

есть этот минимальный путь. Работа завершается.

4) Помечаем индексом k+1 все непомеченные вершины, которые принадлежат образу множества вершин c индексом k. Множество вершин с индексом k+1 обозначаем FWk 1( ) . Присваиваем k:=k+1 и переходим к 2).

Замечания

Множество FWk ( ) называется фронтом волны kго уровня.

Вершины w1w2w3...wk 1 могут быть выделены неоднозначно, что

соответствует случаю, если несколько минимальных путей из v в w .

Чтобы найти расстояния в ориентированном графе, необходимо составить матрицу расстояний R(D) между его вершинами. Это квадратная матрица размерности n n , элементы главной диагонали которой равны нулю ( rii 0 , i=1,..,n).

Сначала составляем матрицу смежности. Затем переносим единицы из матрицы смежности в матрицу минимальных расстояний ( rij aij , если aij 1). Далее построчно заполняем матрицу следующим

образом.

Рассматриваем первую строку, в которой есть единицы. Пусть это строка − i-тая и на пересечении с j-тым столбцом стоит единица (то есть rij 1). Это значит, что из вершины vi можно попасть в вершину

v j за один шаг. Рассматриваем j-тую сроку (строку стоит вводить в

рассмотрение, если она содержит хотя бы одну единицу). Пусть элемент rjk 1. Тогда из вершины vi в вершину vk можно попасть за

два шага. Таким образом, можно записать rik 2 . Следует заметить, что если в рассматриваемых строках две или более единиц, то следует прорабатывать все возможные варианты попадания из одной вершины в другую, записывая в матрицу длину наикратчайшего из них.

17

Примечание. Самый длинный путь найти при помощи алгоритма фронта волны.

Пример

Найдем расстояния в ориентированном графе D, изображенном на рис. 7. В данной задаче количество вершин n=7, следовательно, матрицы смежности и минимальных расстояний между вершинами ориентированного графа D будут иметь размерность 7×7.

Рис.7.

Матрица смежности:

 

0

1

0

0

0

1

0

 

 

1

0

1

0

0

0

0

 

 

 

 

0

0

0

1

0

0

0

 

 

 

 

 

 

 

 

 

 

A(D) 0 0 0

0

0

0

1 .

 

1

1

1

1

0

0

0

 

 

 

 

0

0

0

0

1

0

1

 

 

0

0

0

1

1

0

0

 

 

 

Начинаем заполнять матрицу

R(D)

минимальных расстояний:

сначала ставим нули по главной диагонали и rij=aij, если aij=1, (т.е. переносим единицы из матрицы смежности). Рассматриваем первую строку. Здесь есть две единицы, то есть из первой вершины за один шаг можно попасть во вторую и шестую. Из второй вершины можно попасть за один шаг в третью (путь в первую вершину нас не интересует), следовательно, можно записать r13 2 . Из шестой

вершины можем добраться за один шаг в пятую и седьмую, а значит, r15 2, r17 2 . Теперь ищем маршруты, исходящие из первой

вершины, состоящие из 3 шагов: за 2 шага идем в третью вершину, оттуда за один шаг попадаем в четвертую, поэтому r14 3 . В итоге

получаем следующую матрицу:

18

r(G)

 

 

0

1

2

3

2

1

2

 

 

 

1

0

1

2

3

2

3

 

 

 

 

 

 

4

4

0

1

3

5

2

 

 

 

 

 

 

 

 

 

 

 

 

R(D) 3 3 3 0

2

4

1 .

 

 

1

1

1

1

0

2

2

 

 

 

 

 

 

2

2

2

2

1

0

1

 

 

 

2

2

2

1

1

3

0

 

 

 

 

Таким образом, диаметром исследуемого ориентированного

графа будет d (G)

max d (v, w) 5.

 

 

 

 

 

 

v,w V

 

 

 

 

 

 

 

 

Для каждой вершины заданного ориентированного графа найдем максимальное удаление (эксцентриситет) в графе G от вершины нее

по формуле, которая была приведена выше r(v) max d (v, w) : r(vi) −

w V

максимальное из расстояний, стоящих в i-той строке. Таким образом,

r(v1)=3, r(v2)=3, r(v3)=5, r(v4)=4, r(v5)=2, r(v6)=2, r(v7)=3.

Значит, радиусом графа G будет r(G) min r(v) 2

v V

Соответственно, центрами графа G будут вершины v5 и v6 , так как величины их эксцентриситетов совпадают с величиной радиуса .

Опишем теперь нахождение минимального пути из вершины v3 в вершину v6 по алгоритму фронта волны. Обозначим вершину v3 как V0, а вершину v6 как W (см. рис. 8).

Рис.8.

Множество вершин, принадлежащих образу V0, состоит из одного элемента это вершина v4, которую, согласно алгоритму, обозначаем как V1: FW1(v3)={v4}. Поскольку искомая вершина не принадлежит фронту волны первого уровня W v6 FW1(v3 ) , продолжаем работу

алгоритма. Строим фронт волны второго уровня это множество

19

n 1 , то
êîí
ik

вершин, принадлежащих образу вершины V1: FW2(v3)={v7}, обозначаем v7V2. В образ вершины V2 входят две вершины v5 и v4, но, так как v4 уже была помечена как V0, то фронт волны третьего уровня состоит из одного элемента: FW3(v3)={v5}, v5V3. Из непомеченных вершин в образ вершины V3 входят v1 и v2, соответственно, FW4(v3)={v1, v2}, v1V4, v2V4. Теперь помечены все вершины, кроме v6, которая входит в образ вершины v1 FW4 v3 , то

есть FW5(v3)={v6W}, работа алгоритма закончена. Минимальный путь (5 шагов) из вершины v3 в вершину v6: v3 v4 v7 v5 v1 v6.

2.3.Минимальный путь в нагруженном ориентированном графе

Найти минимальный путь в нагруженном ориентированном

графе из вершины v2

в вершину v6

по методу Форда-Беллмана.

Рассмотрим сначала общую задачу – нахождения минимального

пути из вершины vнач в vкон.

 

 

 

 

 

 

 

 

 

 

Пусть D=(V,X)

нагруженный

ориентированный граф,

 

 

 

 

 

k

 

, где i=1,…,n, k=0,1,2,…,n–1.

V={v1,…,vn}, n>1. Введем величины i

 

 

 

 

 

 

 

 

 

 

k

 

Для каждого фиксированного i и k

величина

i

 

равна длине

минимального пути среди путей из vнач

в vi содержащих не более k

 

k

.

 

 

 

 

 

 

 

 

дуг. Если путей нет, то i

 

 

 

 

 

 

 

 

 

0

 

0

для

 

остальных

vi

vнач .

Положим также нач 0,

i

 

Составляем матрицу длин дуг C(D)=[cij] порядка n:

 

 

l vi , v j ,

vi , v j

X ,

 

 

 

 

cij

 

 

 

vi , v j

X .

 

 

 

 

 

 

 

 

 

 

Утверждение. При i=2,…,n, k 0 выполняется равенство

 

k 1

min

k

c ji .

 

 

 

 

i

 

j

 

 

(3.1)

 

 

 

1 j n

 

 

 

 

 

 

Алгоритм Форда-Беллмана нахождения минимального пути в нагруженном ориентированном графе D из vнач в vкон.( vнач ≠ vкон)

записываем в виде матрицы, i- строка, k-столбец.

1) Составляем таблицу ik , i=1,…,n, k=0,…,n-1. Если пути из vнач в vкон нет. Конец алгоритма.

2) Если n 1 то это число выражает длину любого

êîí

минимального пути из vнач в vкон. Найдем минимальное k1 1, при

20

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]