Вы находитесь на странице: 1из 18

Пути, связность, маршруты

Граф H  V , E  называется подграфом графа G  V , E если


V   V и E   E  V   .
2

Рассмотрим некоторые основные операции, производимые над


графами.
Операцией добавления к графу G  V , E вершины a
образуется граф V  a , E  . Операция добавления дуги  a, b  к
графу G состоит в образовании графа V  a, b , E   a, b  .
Под операцией удаления дуги  a, b  из графа G понимается
операция, заключающаяся в удалении пары  a, b  из множества дуг E,
в результате получается граф. Операция удаления вершины a из
графа G заключается в удалении вершины a вместе с инцидентными
ей дугами/
Отождествление (замыкание) вершин – при замыкании двух
вершин, эти вершины удаляются из графа и заменяются одной новой,
при этом ребра, инцидентные исходным вершинам, теперь будут
инцидентны новой вершине. В случае, когда отождествляемые
вершины a и b соединены дугой, операцию отождествления называют
стягиванием дуги  a, b  .
Примеры:
Рассмотрим графы:

2 2 2

3 1 3 1 3
1

4
G1 G2 G3

 G2 – подграф G1.
 G2 получается из G1 удалением вершины 4.
1
 G3 получается из G2 удалением ребра (1,3).
Пусть G1  V1 , E1  , G2  V2 , E2  - графы. Объединением G1  G2
графов G1 и G2 называется граф V1  V2 , E1  E2  .
Если V1  V2   , то пересечением G1  G2 графов G1 и G2
называется граф V1  V2 , E1  E2  .
Маршруты в графах
Маршрутом от вершины vH к вершине vK в графе G
называется всякая последовательность вида
vH  v0 , e1, v1 , e2 , , en , vn  vK , (в дальнейшем, не теряя общности,
штрихи в номерах будем опускать)
где ek – ребро, соединяющее вершины vk 1 и vk , k  1,2, , n. В случае
орграфа vk 1 – начало дуги еk , a vk – ее конец. При этом вершину vH
называют началом маршрута, а вершину vK – его концом. В
маршруте некоторые вершины и ребра могут совпадать.
Путь или маршрут часто указывают, перечисляя его вершины:
vH  v0  v1  v2  ...  vs 1  vs  vK .
Также маршрут можно задавать последовательностью ребер
e1, e2 , , en .
Число ребер в маршруте называется его длиной.
Тривиальным называется маршрут длины 0.
В дальнейшем будем обозначать маршрут от vH к vK
следующим образом:  vH , vK  , иногда также будем указывать
промежуточные вершины.
Маршрут называется цепью, если в нем нет совпадающих ребер,
и простой цепью – если дополнительно нет совпадающих вершин,
кроме, может быть, начала и конца цепи.
Если начало цепи (простой цепи) совпадает с ее концом, то
такая цепь называется циклом (простым циклом).
Граф без циклов называется ациклическим.
Пусть G  V , E - граф . Если существует маршрут из
 вершины v j в вершину v j , тогда существует и простая
Теорема
соединяющая их цепь.
Доказательство:
 Воспользуемся методом от противного. Пусть маршрут из v j в
v j не является простой цепью. Тогда существует по крайней мере
2
одна вершина vm , встречающаяся в нем не менее двух раз, и маршрут
имеет вид
vi  vi1  ...  vm  vm1  ...  vm  ...  vi .
Удалив из маршрута последовательность ребер vm1  ...  vm ,
снова получим маршрут из v j в v j .
Если при этом он не будет простой цепью, процедуру можно
повторить. Так как число ребер в конечном маршруте конечно,
процесс удаления ребер конечен. В результате получим простую цепь
из v j в v j .
Теорема доказана.
Граф G называется связанным, если имеется маршрут между
любыми его двумя различными вершинами.
Граф G является связным тогда и только тогда, когда
 между любыми двумя его вершинами существует простая
Теорема
цепь.
Доказательство: следует из предыдущей теоремы.
Полным называется граф, любые две вершины которого
смежны.
Пример: Для графа

 (1,2,7,8) или (1,2,3,4) – простая цепь;


 (1,2,4,3,2,7,8) – цепь, не являющаяся простой;
 (3,4,2,5,6,2,4) – маршрут, не являющийся цепью;
 (3,4,2,3) – простой цикл;
 (3,4,2,5,6,2,3) – цикл, не являющийся простым.
Граф называется связным, если любые две вершины в нем
можно соединить маршрутом.
Легко видеть, что отношение связности на множестве вершин
является отношением эквивалентности. Данное отношение разбивает
множество вершин графа на классы, объединяющие вершины,

3
которые можно связать друг с другом маршрутом. Такие классы
называются компонентами связности.
Компонента связности графа G — максимальный (по
включению) связный подграф графа G. Другими словами, это
подграф H, порожденный множеством вершин, в котором для любой
 
пары вершин ui , u j  U в графе H существует ui , u j - цепь и для
любой пары вершин ui  U , u j  U не существует  ui , u j  - цепи.
Для выделения компонент связности можно использовать поиск
в ширину или поиск в глубину. При этом затраченное время будет
линейным от суммы числа вершин и числа ребер графа.
Алгоритм поиска в ширину
Поиск в ширину (англ. breadth-first search, BFS) — один из
методов обхода графа. Пусть задан граф G  V , E и выделена
исходная вершина v0 . Алгоритм поиска в ширину систематически
обходит все ребра G для «открытия» всех вершин, достижимых из v0 ,
вычисляя при этом расстояние от v0 до каждой достижимой из нее
вершины. Алгоритм работает как для ориентированных, так и для
неориентированных графов.
Замечание: Если длины ребер графа равны между собой, поиск
в ширину является оптимальным, то есть всегда находит кратчайший
путь. В случае взвешенного графа поиск в ширину находит путь,
содержащий минимальное количество ребер, но не обязательно
кратчайший.
Пример: Для графа приведенного ниже произвести поиск в
ширину:
Изначально все вершины белые. В процессе обхода каждая из
вершин, по мере обнаружения, окрашивается сначала в серый, а затем
в черный цвет. Определенный момент обхода описывает следующие
условие: если вершина черная, то все ее потомки окрашены в серый
или черный цвет.

4
4
2 9
5
10
1
6

3 7
11
8
12

Решение:
Шаг 1. Включаем вершину 1, просматриваем вершины 2 и 3:
4
2 9
5
10
1
6

3 7
11
8
12

Шаг 2. Включаем вершину 2 в очередь, просматриваем вершины


4 и 5:
4
2 9
5
10
1
6

3 7
11
8
12

Шаг 3. Включаем вершину 3 в очередь, просматриваем вершины


6, 7 и 8:

5
4
2 9
5
10
1
6

3 7
11
8
12

Шаг 4. Включаем вершину 4 в очередь.


Шаг 5. Включаем вершину 5 в очередь, просматриваем вершины
9 и 10 и т.д.
С помощью данного алгоритма можно выявлять структуру
графа и вычислять его метрические характеристики.
Поиск в ширину имеет такое название потому, что в процессе
обхода мы идем вширь, т.е. перед тем как приступить к поиску
вершин на расстоянии k+1, выполняется обход вершин на расстоянии
k.
Алгоритм поиска в глубину
Поиск в глубину (англ. Depth-first search, DFS) — один из
методов обхода графа. Стратегия поиска в глубину, как и следует из
названия, состоит в том, чтобы идти «вглубь» графа, насколько это
возможно. Алгоритм поиска описывается рекурсивно: перебираем все
исходящие из рассматриваемой вершины ребра. Если ребро ведет в
вершину, которая не была рассмотрена ранее, то запускаем алгоритм
от этой нерассмотренной вершины, а после возвращаемся и
продолжаем перебирать ребра. Возврат происходит в том случае,
если в рассматриваемой вершине не осталось ребер, которые ведут в
нерассмотренную вершину. Если после завершения алгоритма не все
вершины были рассмотрены, то необходимо запустить алгоритм от
одной из нерассмотренных вершин
Для ориентированных графов определено понятие компоненты
сильной связности. Ориентированный граф называется сильно
связным, если любые две его вершины vH и vK сильно связны, то
есть если существует ориентированный путь из vH в vK и
ориентированный путь из vK в vH . Компонентами сильной связности
орграфа называются его максимальные по включению сильно

6
связные подграфы. Областью сильной связности называется
множество вершин компоненты сильной связности.
Пример: Граф, приведенный на рисунке ниже имеет две
компоненты связности с множеством вершин {1,2,3,4} и {5,6,7}.

2
6 7
3
4

1 5
Любой граф представляется в виде объединения
 непересекающихся связных (сильных) компонент.
Разложение графа на связные (сильные) компоненты
Теорема
определяется однозначно.
Доказательство: Примем теорему без доказательства.
Если А – матрица смежности графа G, то элемент aij
 матрицы Ak есть число маршрутов длины k из вершины vi в
Теорема
вершину v j .
Доказательство:
 Применим метод математической индукции.
Для k=1 маршрут длины 1 как раз является ребром G,
следовательно, результат теоремы при k=1 вытекает из определения
матрицы смежности А.
Пусть теорема верна для k  1, докажем, что она верна и для k.
Рассмотрим Ak  Ak 1  A . Элемент aij матрицы Ak равен
aij   ais( k 1)  a1sj ,
s
k 1
где ais( k 1) - элемент матрицы A , т.е. число маршрутов длины k  1
от вершины vi до вершины vs , а a1sj - элемент матрицы смежности А,
т.е. маршрут от vs до v j (один). В итоге имеем, что длина маршрута –
k. Поскольку ведется суммирование по всем возможным s, то
вычисляется количество всех возможных маршрутов длины k, в
которых предпоследней вершиной является vs (все возможные), т.е
вычисляется число всех возможных маршрутов длины k из vi в v j .
Теорема доказана. 
7
Следствие 1: В графе G ( G  n ), тогда и только тогда
существует маршрут  vi , v j  , когда элемент aij матрицы
A  A2  A3  ...  An 1 не равен нулю.
Следствие 2: В графе G ( G  n ), тогда и только тогда
существует цикл, содержащий вершину vi , когда элемент aii матрицы
A  A2  A3  ...  An 1 не равен нулю.
Пример: Дан орграф. Найти число маршрутов длины 2 из
вершины № 2 в № 4, число маршрутов в графе длины 3:
1 2
5

4 3
Построим матрицу смежности данного графа:
0 1 0 0 0
0 0 0 1 1 
 
A  1 1 0 1 0 .
 
 1 0 0 0 1 
0 0 1 0 0
 
Согласно теореме о числе маршрутов длины n их количество
находится как An . Тогда, число маршрутов длины 2 и 3
соответственно:
0 0 0 1 1  1 0 1 0 1 
1 0 1 0 1  1 2 1 1 1 
   
A   1 1 0 1 2, A  1 1 2 1 2.
2 3
   
 0 1 1 0 0 1 1 0 2 1
 1 1 0 1 0 1 1 0 1 2
   
2
По матрице A найдем число маршрутов длины 2 из вершины №
2 в № 4 – это элемент a24 , т.е. 0.
Общее число маршрутов длины 3 – это сумма всех элементов
матрицы A3 , т.е. 26.
Число маршрутов длины 4 находятся аналогично (по матрице
A4 ).

8
Ответ: число маршрутов длины 2 из вершины 2 в 4 равно 0,
общее число маршрутов длины 3 – 26.

Поиск кратчайших маршрутов


Пусть G  V , E связный неориентированный граф, vi , v j – две
его не совпадающие вершины. Длина кратчайшего vi , v j – маршрута 
называется расстоянием между вершинами vi и v j и обозначаются
 
через  vi , v j . Положим   v, v   0 . Очевидно, что введенное таким
образом расстояние удовлетворяет следующим аксиомам метрики:
 
 vi , v j  0 ;
  vi , v j   0  vi  v j ;
  vi , v j     v j , vi  (симметричность);
  vi , v j     vi , u     u, v j  (неравенство треугольника).
Матрицей расстояний называется матрица P  ( pij ) , в которой
pij   (vi , v j ) . Заметим, что P   P , т.е. матрица P симметрична.
Зафиксируем вершину vi . Для этой вершины величина
 
e(vi )  max  (vi , v j ) называется эксцентриситетом вершины vi .
Т.е., эксцентриситет вершины равен расстоянию от данной вершины
до наиболее удаленной от нее.
Максимальный среди всех эксцентриситетов вершин называется
диаметром графа G и обозначается через d (G ) : d (G )  max e(vi ) .
Вершина u называется периферийной, если e(u )  d (G ) .
Минимальный из эксцентриситетов графа G называется
радиусом и обозначается через r (G ) : r (G )  min e(vi ) . Вершина u
называется центральной, если e(u )  r (G ) . Множество всех
центральных вершин графа называется его центром.
Пример: Найдем диаметр графа, изображенного на рисунке:

9
v1
3 v2
4
2
1 2 v3
3
v5 1 v4
Решение: Матрица расстояний P имеет вид
0 3 5 2 1
 3 0 4 2 3
 
5 4 0 3 2,
 
2 2 3 0 1
1 3 2 1 0
 
отсюда e(v1 )  5, e(v2 )  4, e(v3 )  5, e(v4 )  3, e(v5 )  3 и,
следовательно d (G )  5 . Вершины 1 и 3 являются периферийными.
Пример: Радиус графа из предыдущего примера равен 3, а его
центром является множество v4 , v5  .
Будем предполагать, что в G отсутствуют контуры с
отрицательным весом, поскольку, двигаясь по такому контуру
достаточное количество раз, можно получить маршрут, имеющий вес
меньше любого заведомо взятого числа, и тем самым задача
нахождения расстояния становится бессмысленной.
Алгоритм Форда–Беллмана
Определим алгоритм Форда–Беллмана. Зададим строку
D(1)  (d1(1) , d 2(1) , d n(1) ) , полагая d1(1)  0, d (1)
j  wij , i  j . В этой строке

j ( j  i ) есть вес wij дуги ( ai , a j ) , если ( ai , a j ) существует, и


d (1)
d (1)
j , если (ai , a j )  . Теперь определим строку
D(2)  (d1(2) , d2(2) , dn(2) ) , полагая d (2)
j j , d k  wkj
min d (1) (1)

k 1, , n
.

Нетрудно заметить, что d (2) j – минимальный из весов ( ai , a j ) –


маршрутов, состоящих не более чем из двух дуг (рис. 4.24).
Продолжая процесс, на шаге s определим строку
D( s )  (d1( s ) , d2( s ) , d n( s ) ) , полагая d (j s ) 
min d (j s 1) , d k( s 1)  wkj . k 1, , n
Искомая строка w -расстояний получается при
( n 1)
s  n  1: d j   (ai , a j ) . Действительно, на этом шаге из весов всех
10
(ai , a j ) –маршрутов, содержащих не более n  1 дуг, выбирается
наименьший, а каждый маршрут более чем с n  1 дугами содержит
контур, добавление которого к маршруту не уменьшает w –
расстояние, так как мы предположили отсутствие контуров
отрицательного веса. Работу алгоритма можно завершить на шаге k ,
если D ( k )  D( k 1) .
Пример 4.5.2. Продемонстрируем работу алгоритма Форда-
Беллмана на примере взвешенного графа, показанного на рис. 4.25 с
матрицей весов
 0 1   3
 0 3 3 8 
 
W   0 3 3 8 
 
   0 1  5 
   4 0 .
 
В качестве источника выберем вершину 1. Тогда
D (1)  (0,1, , ,3), D (1)  (0,1, , ,3), D (2)  (0,1, 4, 4,3), D (3)  (0,1, 4, 4, 1), D (4)  (
. Таким образом,
w (1,1)  0, w (1,2)  1, w (1,3)  4, w (1,4)  3,  w (1,5)  1
Отметим, что, зная расстояние от источника ai до всех
остальных вершин графа, можно найти и сами кратчайшие (ai , a j ) –
маршруты. Действительно, пусть ai , b1 , b2 , , br , a j – кратчайший
(ai , a j ) –маршрут. Тогда по строке D ( n 1) вершина br  ak1 находится
из соотношения  w (ai , a j )  w (ai , a j )  wk1 j , вершина br 1  ak2 - из
соотношения w (ai , ak1 )  w (ai , ak2 )  wk2k1 и т.д.
Пример 4.5.2. В примере 4.5.1. кратчайший (1,4)-маршрут
определяется следующим образом: w (1,4)  3  1  4  w (1,5)  w54 ,
тогда br  5; w (1,5)  1  4  5  w (1,3)  w35 , откуда
br 1  3; w (1,3)  4  1  3  w12  w23 , следовательно
br 2  b2  3, br 3  b1  2 . Таким образом кратчайший (1,4)-маршрут
задается последовательностью вершин (1,2,3,5,4).
Алгоритм Дейкстры — алгоритм на графах, изобретённый
нидерландским ученым Э. Дейкстрой в 1959 году. Находит
кратчайшее расстояние от одной из вершин графа до всех остальных.
Работает только для графов без рёбер отрицательного веса.
11
Алгоритм Дейкстры является более эффективным, чем алгоритм
Форда-Беллмана, но используется только для взвешенных графов, в
которых веса всех дуг не отрицательны.
Пусть требуется найти кратчайшие расстояния от 1-й вершины
до всех остальных.

Кружками обозначены вершины, линиями – пути между ними


(ребра графа). В кружках обозначены номера вершин, над ребрами
обозначен их вес – длина пути. Рядом с каждой вершиной красным
обозначена метка – длина кратчайшего пути в эту вершину из
вершины 1.
Инициализация: Метка самой вершины 1 полагается равной 0,
метки остальных вершин – недостижимо большое число (в идеале —
бесконечность). Это отражает то, что расстояния от вершины 1 до
других вершин пока неизвестны. Все вершины графа помечаются как
непосещенные.

Шаг 1. Минимальную метку имеет вершина 1. Её соседями


являются вершины 2, 3 и 6. Обходим соседей вершины по очереди.
Первый сосед вершины 1 – вершина 2, потому что длина пути до
неё минимальна. Длина пути в неё через вершину 1 равна сумме
кратчайшего расстояния до вершины 1 (значению её метки) и длины
ребра, идущего из 1-й во 2-ю, то есть 0 + 7 = 7. Это меньше текущей
метки вершины 2 (10000), поэтому новая метка 2-й вершины равна 7.
12
Аналогично находим длины пути для всех других соседей
(вершины 3 и 6).
Все соседи вершины 1 проверены. Текущее минимальное
расстояние до вершины 1 считается окончательным и пересмотру не
подлежит. Вершина 1 отмечается как посещенная.
Шаг 2. Шаг 1 алгоритма повторяется. Снова находим
«ближайшую» из непосещенных вершин. Это вершина 2 с меткой 7.
Снова пытаемся уменьшить метки соседей выбранной вершины,
пытаясь пройти в них через 2-ю вершину. Соседями вершины 2
являются вершины 1, 3 и 4.
Вершина 1 уже посещена. Следующий сосед вершины 2 —
вершина 3, так как имеет минимальную метку из вершин,
отмеченных как не посещённые. Если идти в неё через 2, то длина
такого пути будет равна 17 (7 + 10 = 17). Но текущая метка третьей
вершины равна 9, а 9 < 17, поэтому метка не меняется.

Ещё один сосед вершины 2 — вершина 4. Если идти в неё через


2-ю, то длина такого пути будет равна 22 (7 + 15 = 22). Поскольку
22<10000, устанавливаем метку вершины 4 равной 22.

13
Все соседи вершины 2 просмотрены, помечаем её как
посещенную.
Шаг 3. Повторяем шаг алгоритма, выбрав вершину 3. После её
«обработки» получим следующие результаты.

Шаг 4

Пятый шаг

Шаг 6

14
Таким образом, кратчайшим путем из вершины 1 в вершину 5
будет путь через вершины 1 — 3 — 6 — 5, поскольку таким путем мы
набираем минимальный вес, равный 20.
Займемся выводом кратчайшего пути. Мы знаем длину пути для
каждой вершины, и теперь будем рассматривать вершины с конца.
Рассматриваем конечную вершину (в данном случае — вершина 5), и
для всех вершин, с которой она связана, находим длину пути,
вычитая вес соответствующего ребра из длины пути конечной
вершины.
Так, вершина 5 имеет длину пути 20. Она связана с вершинами 6
и 4.
Для вершины 6 получим вес 20 — 9 = 11 (совпал).
Для вершины 4 получим вес 20 — 6 = 14 (не совпал).
Если в результате мы получим значение, которое совпадает с
длиной пути рассматриваемой вершины (в данном случае — вершина
6), то именно из нее был осуществлен переход в конечную вершину.
Отмечаем эту вершину на искомом пути.
Далее определяем ребро, через которое мы попали в вершину 6.
И так пока не дойдем до начала.
Если в результате такого обхода у нас на каком-то шаге
совпадут значения для нескольких вершин, то можно взять любую из
них — несколько путей будут иметь одинаковую длину.
Алгоритм Дейкстры в матричном виде.
Итак, пусть G – взвешенный граф, W  ( wij - матрица весов
графа G , где wij  0; ai – выделенный источник. Зададим строку
D(1)  (d1(1) , d 2(1) , d n(1) ) , полагая, как и в алгоритме Форда-Беллмана,
d1(1)  0, d (1)
j  wij , i  j . Обозначим через T1 множество вершин
M ai  . Предположим, что на шаге s уже определены строка
D( s )  (d1( s ) , d n( s ) ) и множество вершин TS . Выберем теперь вершину

15
a j  Ts так, что d (j s )  
min d (j s ) ak  Ts . Положим Ts 1 Ts a j  ,
D(j s 1) d ( s 1)
1 , 
, d ns 1 , где d k( s 1)  
min d k( s ) , d (j s )  w jk , если
ak  Ts 1 , и dk( s 1)  dk( s ) , если ak  Ts 1 . На шаге s  n  1 образуется
строка D ( n 1) w –расстояние между вершиной ai и остальными
вершинами графа: d (jn 1)   w (ai , a j ) .
Отметим, что для реализации алгоритма Форда-Беллмана
требуется порядка n3 операций, тогда как в алгоритме Дейкстры
необходимо выполнить порядка n 2 операций.
Пример 4.5.3. Рассмотри
взвешенный граф G с матрицей весов
 0 1    
 0 5 2  7 
 
  0   1 
W  
 2  1 0 4  
   3 0 
 
    1 0 
и источником 1 (рис. 4.26).
Тогда по алгоритму Дейкстры
 4,5,
2,3, 1T 6 , (0, 1,D , , , ),  3, 4,5,
(2)
2T6 , (0,1,
(3)
D6, 3, , ), 
(в D ( s ) подчеркнута величина d (j s ) , для которой Ts 1  Ts \ a j ). Таким  
образом,
 w 1,1  0,  w 1, 2   1,  w 1,3  4,  w 1, 4   3,  w 1,5   6,  w 1,6   5
Опишем теперь алгоритм нахождения кратчайших маршрутов в
бесконтурном графе. Так же, как и в алгоритме Дейкстры, для
выполнения этого алгоритма необходимо порядка n 2 операций.
Прежде всего заметим, что в конечном бесконтурном графе
G  M , R вершины можно перенумеровать так , что каждая дуга
будет иметь вид (ai , a j ) , где i  j . Действительно в конечном
бесконтурном графе всегда существует вершина a , в которую не
заходит ни одна дуга. Обозначим эту вершину через a1 и рассмотрим
граф G1 , полученный из G удалением вершины a1 . Граф G1 также
является бесконтурным и, следовательно, содержит вершину a  , в
16
которую не заходит ни одна дуга графа G1 . Вершину a  обозначим
через a2 , а граф, полученный из G1 удалением вершины a2 – через G2 .
Продолжая процесс, получим в результате искомую нумерацию
a1, a2 , , an вершин графа G .
Пример 4.5.4. На рис. 4.27 приведен пример нумерации вершин
бесконтурного взвешенного графа, при которой из (ai , a j ) 
следует i  j (в скобках указаны веса
взвешенных дуг).
Предположим, что в бесконтурном
графе G   a1 , , an  , R для произвольной
дуги (ai , a j ) выполняется условие i  j .
Заметим, что при такой нумерации все
элементы матрицы весов, стоящей под
главной диагональю, равны .
Рассмотрим строку D(1)  (d1(1) , d 2(1) , d n(1) ) ,
где d1(1)  0; d (1)
j  w1 j ; j  2 . Если на шаге s

строка D( s )  (d1( s ) , d2( s ) , d n( s ) ) определена, положим


D( s 1)  (d1( s 1) , d 2( s 1) , d n( s 1) ) , где d (j s 1) 
min d (j s ) , d k( s )  wkj  для
k  j и (ai , a j )  , j  1, , n . Данный алгоритм является аналогом
алгоритма Форда-Беллтмана, учитывающим бесконтурность графа G ,
и при s  n  1 получаем d (jn 1)   w (a1 , a j ) .
Пример 4.5.5. Для графа G (рис. 4.27) имеем

17
0 1  2   1  
  0 2  7    
 
   0   10   
 
   0  5   
W  ,
    0 6  1 
 
      0   
      0 3 
 
        0 
D (1)  (0,1, ,2, , ,1, ), D  (0,1, 1,2, 3, ,1,4),
(2)

D (3)  (0,1, 1,2, 3,3,1, 2)  D(4)  D(5)  D(6)  D(7)


Отметим, что если в приведенных алгоритмах  заменить на
 , min - на max , то получим алгоритмы, которые позволяют в
графах, не имеющих контуров положительных весов, находить
маршруты наибольшей длины.

18