Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
METODIChKA_laby_DM.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
1.58 Mб
Скачать
    1. Теоретические сведения

      1. Задача о кратчайшем пути

Формулировка задачи:

В ориентированном взвешенном графе G = (X,U) найти кратчайший путь из начальной вершины s в конечную вершину t.

Считаем, что отсутствующие в графе дуги имеют вес равный ∞ (максимальное целое число).

Для графа с неотрицательными весами дуг, т.е. , один из алгоритмов нахождении кратчайшего пути предложил Е. Дейкстра в 1959г.

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

Кроме , с каждой вершиной графа , за исключением , связывается ещё одна метка - . На каждой итерации является номером вершины, предшествующей в - пути, имеющем минимальный вес среди всех - путей, проходящих через вершины получивших к данному моменту постоянные метки. После того, как вершина получила постоянную метку, с помощью меток легко указать последовательность вершин, составляющих кротчайший - путь.

Перед началом первой итерации алгоритма вершина имеет постоянную метку , а метки всех остальных вершин равны и эти метки временные. Общая итерация алгоритма состоит в следующем. Пусть - вершина, получившая постоянную метку на предыдущей итерации. Просматриваем все вершины , имеющие временные метки, с целью уменьшения этих меток. Метка вершины заменяется на , если оказалось, что . В этом случае говорим, что вершина получила свою метку из вершины , и полагаем . Если же , то метки и вершины не изменяются на данной итерации. Алгоритм заканчивает работу, когда метка становится постоянной. - вес кротчайшего - пути, который будем обозначать через . Этот путь определяется с помощью меток так: .

Будем считать, что граф задан матрицей весов либо списками смежности.

      1. Алгоритм Дейкстры нахождения кратчайшего пути в графе

  1. Положить и считать эту метку постоянной. Положить для всех , и считать эти метки временными. Положить .

  2. Для всех с временными метками выполнить:

если , то и .

Иначе и не менять.

  1. Пусть - множество вершин с временными метками . Найти вершину такую, что . Считать метку постоянной меткой вершины .

  2. Положить . Если , то перейти к пункту 5, иначе перейти к пункту 2.

  3. , - кратчайший путь.

      1. Пример решения задачи нахождения кратчайшего пути

В простом взвешенном графе на рисунке 3.1 найти кратчайший путь из в , используя алгоритм Дейкстры.

x2 3 x4 6 x7

6 6 7 5

x0 4 x1 9 x8

3 x5 4 11

8 10

x3 7 x6

Рисунок 3.1 - Простой взвешенный граф

Табли­ца 3.1 - Последо­вательное изменение меток вершин

Метки

X0

0

0

0

0

0

0

0

0

0

X1

4

4

4

4

4

4

4

4

X2

6

6

6

6

6

6

6

6

X3

8

7

7

7

7

7

7

7

X4

10

9

9

9

9

9

9

X5

13

13

13

13

13

13

X6

14

14

14

14

14

X7

15

15

15

15

X8

22

22

20

Таблица 3.2 - Последо­вательное изменение меток

Метки

X1

0

0

0

0

0

0

0

X2

0

0

0

0

0

0

0

X3

0

1

1

1

1

1

1

X4

1

2

2

2

2

2

X5

2

2

2

2

2

X6

3

3

3

3

X7

4

4

4

X8

5

7

Из таблиц 3.1 и 3.2 можно определить кратчайший путь и его длину.

Длину кратчайшего пути в таблице 3.1 определяем по постоянной метке, которую имеет конечная вершина: вершина имеет постоянную метку равную 20, значит длина кратчайшего пути l ( )=20.

Сам кратчайший путь определяем из таблицы 4.2: метка последней вершины указывает на индекс вершины предшествующей ей и т.д. пока не дойдем до начальной вершины. Вершины в обратном порядке указывают кратчайший путь: .

l=6 l=9 l=15

x2 3 x4 6 x7

6 6 7 5

x0 4 x1 9 x8

3 l=4 x5 l=13 4 11 l=20

8 10

x3 7 x6

l=7 l=14

Рисунок 3.2 - Окончательное распределение меток и кратчайший путь

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