Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
UP_2.doc
Скачиваний:
10
Добавлен:
01.04.2025
Размер:
4.78 Mб
Скачать

6. 3. Некоторые задачи теории графов

6.3.1. Поиск кратчайшего пути в графе

Пусть дан некоторый граф, каждому ребру которого поставлено в соответствие некоторое число l(Vi, Vj) – длина этого ребра. Тогда длиной пути в графе называется сумма длин ребер, образующих этот путь. Требуется найти кратчайший путь от некоторой вершины S до вершины t.

Алгоритм поиска кратчайшего пути

Алгоритм основан на присвоении вершинам графа меток. Каждой вершине графа можно присвоить врéменную или постоянную метки, состоящие из двух чисел: ( ), где – расстояние от S до вершины ; j – номер вершины Vj, непосредственно предшествующей вершине на пути от S до .

На каждом шаге с помощью некоторой процедуры метки изменяются. Если согласно методу метка вершины становится постоянной, то кратчайшее расстояние от S до найдено:

.

Рядом с постоянной меткой будем ставить знак +.

Шаг 1. Присвоение начальных меток.

Полагаем d(S) = 0, и метку (0;S)+ считаем постоянной. Для всех остальных вершин полагаем и считаем их метки врéменными. Обозначим P = S.

Шаг 2. Обновление меток.

Для всех вершин , смежных с вершиной Р и имеющих врéменные метки, изменяем метки по правилу

новая

метка

старая

метка

, (*)

j – изменяется в случае изменения первого числа в метке и становится равным номеру вершины P.

Шаг 3. Превращение метки в постоянную.

Среди всех вершин с врéменными метками выбираем вершину с минимальным расстоянием, т. е. и считаем эту метку постоянной, т. е. ставим рядом с меткой знак + и полагаем

Шаг 4. Анализ решения.

1. Нахождение кратчайшего пути от вершины S до вершины t:

а) если P = t, то поиск закончен, кратчайшее расстояние от S до t равно d(P); для описания кратчайшего пути переходим к шагу 5;

б) если P ¹ t, то возвращаемся к шагу 2.

2. В случае, когда нужно найти кратчайшее расстояние от вершины S до всех вершин графа, проверяем, если метки всех вершин постоянные, то переходим к шагу 5. В противном случае возвращаемся к шагу 2.

Шаг 5. Описание кратчайших путей.

Описание кратчайших путей от вершины S до любой вершины начинаем с вершины , т. е. с конца, и используем информацию в метках (второе число).

Пример. Найти кратчайшие пути от вершины S до всех остальных вершин графа, изображенного на рис. 6.8.

 

 

 

 

 

 

 

 

 

 

 

 

Решение. Вычисленные на каждом этапе метки удобно заносить в соответствующие строки заранее приготовленной табл.6.1, а в вершинах графа проставлять постоянные метки.

1. Вершине S присвоим метку, равную (0;S) и считаем ее постоянной. Всем остальным вершинам присвоим врéменные метки, т. е. d(S) = 0, d(Vi) = ¥, (i = 1, 2, 3, …, 9) и полагаем P = S (см. первую строку табл. 6.1).

2. Обновляем метки.

Рассмотрим вершины, смежные с вершиной P, и для них по правилу (*) обновим метки.

d(V1) = min{¥, 0+8} = 8, j = S; d(V2) = min{¥, 0+13} = 13, j = S;

d(V3) = min{¥, 0+15} = 15, j = S; d(V4) = min{¥, 0+10} = 10, j = S.

Записываем метки во вторую строку табл. 6.1.

Таблица 6.1

Вычисление меток вершин графа

S

v1

v2

v3

v4

v5

v6

v7

v8

v9

0;S+

¥

¥

¥

¥

¥

¥

¥

¥

¥

 

8;S+

13;S

15;S

10;S

¥

¥

¥

¥

¥

 

 

12;1

15;S

10;S+

¥

23;1

¥

¥

¥

 

 

12;1+

14;4

 

19;4

23;1

¥

22;4

¥

 

 

 

14;4+

 

17;2

23;1

¥

22;4

¥

 

 

 

 

 

17;3+

23;1

¥

22;4

¥

 

 

 

 

 

 

21;5

19;5+

22;5

¥

 

 

 

 

 

 

21;5+

 

22;5

26;7

 

 

 

 

 

 

 

 

22;5+

25;6

 

 

 

 

 

 

 

 

 

25;6+

3. Среди всех вершин с врéменными метками выбираем вершину с минимальным расстоянием и считаем ее метку постоянной.

Очевидно, d(V1) = min{d(vi)}, i = 1,…, 9; следовательно,

(d(V1);S) = (8;S)+ и полагаем P = V1, d(P) = 8.

4. Возвращаемся к шагу 2. Смежными с вершиной V1 являются вершины V2 и V6.

Имеем d(V2) = min{13, 8+4} = 12, j =1; d(V6) = min{¥, 8+15} = 23;

j =1.

Заполняем третью строку табл. 6.1. Метка вершины V4 становится постоянной.

Продолжаем так процедуру до тех пор, пока метки всех вершин не станут постоянными.

  1. Построим кратчайшие пути от вершины S до всех вершин (рис. 6.9). Например, кратчайший путь от S до V9: метка V9 (25; 6) показывает, что Smin = 25, непосредственно предшествующая вершина на пути от S до V9 будет V6 (второе число в метке 6).

Метка V6 (21; 5), т. е. расстояние от S до V6 равно 21, предшествующая вершина V5 и т. д.

Получим путь S® V1® V2® V5® V6® V9.

 

 

 

 

 

  

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