Пр.10 «Нахождение кратчайших путей в графе. Алгоритм Дейкстры»

Отчет по практическим работам

ПО «МАТЕМАТИЧЕСКОМУ МОДЕЛИРОВАНИЮ»

 

 

ВЫПОЛНИЛА:

Студентка группы ИСП-О-18

Климова Е.С.

 

ПРОВЕРИЛА:

Шелепова Т.С.

 

Оценка ___________________

 

 

п. Электроизолятор

2020 г.

Пр.10 «Нахождение кратчайших путей в графе. Алгоритм Дейкстры»

    Цель:

    Приобретение навыков нахождения кратчайших путей в графе с помощью алгоритма Дейкстры.

Вариант 6.         

C12

C13

C14

C25

C27

C35

C36

C37

C45

C46

C47

8

1

5

9

2

6

8

4

5

2

6

C58

C59

C68

C69

C79

C8,10

C9,10

1

8

3

6

2

5

9

Решение:

Шаг 1

Включаем в S источник – вершину 1. Определим длины расстояний из источника до всех других вершин графа. Для всех вершин i, смежных с вершиной,1 положим длину пути из 1 в них, равной весу ребра их соединяющего . Для всех вершин, не смежных с вершиной 1 положим длину пути из 1 в них, равной ∞.

По условию задачи вершины смежные с 1 имеют номера 2, 3 и 4. Занесем данные в таблицу 1.

 

 

(Табл. 1)

S

D[2]

D[3]

D[4]

D[5]

D[6]

D[7]

D[8]

D[9]

D[10]

 

1

8

1

5

min(D[3]) = 1

                               

Полученные данные изобразим на графе. Вершины, включенные в S на каждом шаге, будем помечать желтым цветом (рис. 1), пути до вершин, которые возможно определить на текущем шаге алгоритма – зеленым, путь минимальной длины на данном шаге – красным.

Рис. 1

Шаг 2

    По данным табл. 1, минимальным является путь из источника в вершину 3 равный D[3] = 1, следовательно, включаем в S вершину 3. также заносим в вектор предшественников для вершины 3 значение 1, так как на кратчайшем пути из вершины 1 в вершину 3 вершиной предшествующей вершине 3 является вершина 1, т.е. сам источник Prev[3] = 1.

Рис. 2

Имея в S вершины с номерами 1 и 3, определим минимальные длины путей, которые возможно построить из источника до других вершин графа, проходя только через 1 и 3. Здесь является минимальный путь из вершины 1 и направления к вершине 5. Занесем данные в табл. 2.

(Табл.2)

S

D[2]

D[3]

D[4]

D[5]

D[6]

D[7]

D[8]

D[9]

D[10]

1

8

1

5

1,3

8

1

5

min(1+6;∞) = 7

min(1+8;∞) = 9

min(1+4;∞) = 5

 

min(D[4]) = 5

 

Шаг 3

По данным табл. 2 имеем минимальную вершину 4. Для вершины 4 предшествующий на минимальном пути к ней будет вершена 1, следовательно,  Prev[4] = 1.

 

Рис. 3

Имея в S вершины с номерами 1,3 и 4, пересчитаем длины путей, которые возможно построить из источника с помощью вершин множества S и выберем кратчайшее из них.

С включением вершины 4 в S кратчайшие пути в вершины 2 и 7 не появляются, однако через вершины 1 и 4 есть возможность определить минимальный на текущем шаге путь до вершины 5: D[6] = min(5 + 2) = 7. Данные занесем в табл. 3.

(Табл.3)

S

D[2]

D[3]

D[4]

D[5]

D[36]

D[8]

1

8

1

5

1,3

8

1

5

min(1+6;10) = 7

min(1+8;∞) = 9

1,3,4

8

1

5

7

9

D[9]

D[10]

D[45]

D[46]

D[47]

 

 

min(5+5;∞) = 10

min(5+2;∞) = 7

min(5+6;∞) =11

 

10

7

11

 
                       

min(D[5]) = 7

 

Шаг 4

На этом шаге кратчайшим из источника является путь в вершину 5 равный D[5] = 7, включим в S вершину 5. Следовательно, Prev[5] = 3.

Рис. 4

При включении в S вершины 5 появляется путь из источника до вершины 8: D[8] = min(7+1) = 8. До других вершин кратчайшие пути не возникают. Занесем данные в табл. 4.

(Табл. 4)

S

D[2]

D[3]

D[4]

D[5]

D[6]

1

8

1

5

1,3

8

1

5

min(1+6;∞) = 7

min5+2;∞) = 7

1,3,4

8

1

5

7

7

1,3,4,37, 35, 36, 45, 46, 47

8

1

5

7

7

D[7]

D[8]

D[9]

D[10]

D[45]

D[46]

min(1+4;∞) = 5

min(5+5;∞) = 10

min(5+2;∞) = 7

5

10

7

5

min(7+1;∞) = 8

10

7

min(D[8]) = 8

 

Шаг 5.

Присоединяя вершину 8, мы получаем готовый граф.

И в итоге получается такая таблица:

S

D[2]

D[3]

D[4]

D[5]

1

8

1

5

1,3

8

1

5

min(1+6;∞) = 7

1,3,4

8

1

5

7

1,3,4, 5, 6, 7, 8, 9

8

1

5

7

1,3,4, 5, 6, 7, 8, 9

8

1

5

7

1,3,4, 5, 6, 7, 8, 9, 10

8

1

5

7

D[6]

D[7]

D[8]

D[9]

D[10]

min5+2;∞) = 7

min(1+4;∞) = 5

7

5

7

5

min(7+1;∞) = 8

7

5

8

13

min(8+5;8) = 13

7

5

8

13

13

min(D[10]) = 13

Таким образом, возможно сформулировать окончательные результаты работы алгоритма:

1. Кратчайшие пути от источника – вершины 1 до всех других вершин графа, а также значения вершин, предшествующих на этих путях, будут равны:

S

D[2]

D[3]

D[4]

D[5]

D[6]

D[7]

D[8]

D[9]

D[10]

min(D[i])=

8

1

5

7

7

5

9

13

13

Prev[i]=

1

1

3

4

4

4

4

5

6

 

2. Кратчайший путь от источника – вершины 1 до стока – вершины 10 будет равен:D[10] = 17 проходит через вершины:

I ->3->5->8->S.

 


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: