Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
100-63.doc
Скачиваний:
5
Добавлен:
26.11.2019
Размер:
9.79 Mб
Скачать

Тема 15 Найкоротший шлях у мережі. Алгоритм Дейкстри

15.1. Завдання. Задана дорожна мережа, яка складається з дев’яти вершин (населених пунктів), з’єднаних ребрами (дорогами) так, як це показано на Рис.5. Необхідно знайти найкоротші шляхи від вузла 1 до інших пунктів мережі, використовуючи алгоритм Дейкстри. Елементи матриці відстаней Dik (один з варіантів, у кілометрах) задані наступною таблицею 4. Всі інші, не вказані у таблиці, відстані дорівнюють M (“машинна нескінченність”).

Таблиця 4. Значення відстаней для Рис.5.

D12

D14

D23

D26

D34

D35

D47

D48

D56

D57

D69

D78

D89

31

38

24

27

31

22

14

11

11

10

22

27

11

15.2. Розв’язування. Матриця відстаней матиме вигляд:

Таблиця 5. Матриця відстаней для Рис.5.

1

2

3

4

5

6

7

8

9

1

0

31

М

38

М

М

М

М

М

2

31

0

24

М

М

27

М

М

М

3

М

24

0

31

22

М

М

М

М

4

38

М

31

0

М

М

14

11

М

5

М

М

22

М

0

11

10

М

М

6

М

27

М

М

11

0

М

М

22

7

М

М

М

14

10

М

0

27

М

8

М

М

М

11

М

М

27

0

11

9

М

М

М

М

М

22

М

11

0

Алгоритм задачі використовує три масиви з n (n - кількість вершин) чисел кожний.

Перший масив а містить мітки з двома значеннями: 0 (вершина ще не розглянута) і 1 (вершина уже розглянута).

Другий масив b містить відстані - біжучі найкоротші відстані від початкової вершини Vi до іншої вершини Vk.

Третій масив с містить номери вершин - k-ий елемент ck є номером передостанньої вершини на біжучому найкоротшому шляху з Vi до Vk. Матриця відстаней Dik задає довжини ребер dik; якщо такого ребра немає, то dik присвоюється значення дуже великого числа М, яке дорівнює “машинній нескінченності”.

Вміст масивів a,b,c після виконання першого кроку (ініціалізація) буде таким, як це показано в наступній таблиці.

1

2

3

4

5

6

7

8

9

min bk = 31

a

1

0

0

0

0

0

0

0

0

b

0

31

М

38

М

М

М

М

М

c

0

1

1

1

1

1

1

1

1

min bk = 31 (найменше значення серед непомічених вершин). Отже розглядаємо вершину 2. Через неї пролягає два маршрути 1 – 2 – 3 і 1 - 2 - 6. Довжина їх становить відповідно: 55 км і 58 км, що є меншим від машинної нескінченності M. Отже заміняємо у векторі b третю і шосту координату числами 55 і 58, а у векторі c третю і шосту координату - числом 2 (номер передостанньої вершини в маршруті). Всі інші координати масивів a, b, c не зміняться.

1

2

3

4

5

6

7

8

9

min bk = 38

a

1

1

0

0

0

0

0

0

0

b

0

31

55

38

М

58

М

М

М

c

0

1

2

1

1

2

1

1

1

Наступний крок. min bk = 38 (четверта вершина). Через неї проходять маршрути 1 – 4 – 3, 1 – 4 – 7 і 1 – 4 – 8. Довжина їх становить відповідно: 69 км, 52 км і 49 км. Оскільки 69 > 55, маршрут 1 – 4 – 3 є невигідним і ми залишаємо старий маршрут 1 - 2 - 3. Що стосується двох інших маршрутів, то їх довжина є меншою від відповідних відстаней, записаних у другому рядку таблиці. Отже заміняємо у векторі b сьому і восьму координату числами 52 і 49, а у векторі c сьому і восьму координату - числом 4 (номер передостанньої вершини в маршруті). Всі інші координати масивів a, b, c не зміняться.

1

2

3

4

5

6

7

8

9

min bk = 49

a

1

1

0

1

0

0

0

0

0

b

0

31

55

38

М

58

52

49

М

c

0

1

2

1

1

2

4

4

1

Вміст масивів a, b, c змінюється по мірі виконання алгоритму так, як це показано нижче.

1

2

3

4

5

6

7

8

9

min bk = 52

a

1

1

0

1

0

0

0

1

0

b

0

31

55

38

М

58

52

49

60

c

0

1

2

1

1

2

4

4

8

1

2

3

4

5

6

7

8

9

min bk = 55

a

1

1

0

1

0

0

1

1

0

b

0

31

55

38

62

58

52

49

60

c

0

1

2

1

7

2

4

4

8

min bk = 58

1

2

3

4

5

6

7

8

9

a

1

1

1

1

0

0

1

1

0

b

0

31

55

38

62

58

52

49

60

c

0

1

2

1

7

2

4

4

8

1

2

3

4

5

6

7

8

9

min bk = 60

a

1

1

1

1

0

1

1

1

0

b

0

31

55

38

62

58

52

49

60

c

0

1

2

1

7

2

4

4

8

1

2

3

4

5

6

7

8

9

a

1

1

1

1

0

1

1

1

1

b

0

31

55

38

62

58

52

49

60

c

0

1

2

1

7

2

4

4

8

Виконання другого кроку алгоритму Дейкстри завершено. Використовуючи вміст масивів a, b, c на останньому кроці, ми можемо вказати найкоротші шляхи з пункту 1 до інших пунктів мережі.

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