Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Практикум_ДОТС.docx
Скачиваний:
1
Добавлен:
01.07.2025
Размер:
484 Кб
Скачать
☆

Контрольні запитання:

  1. До яких методів програмування належить угорський метод?

  2. Які ще задачі можна вирішувати вказаним методом?

  3. Що таке двочастковий граф? Повний двочастковий граф? Навести приклади.

  4. Що значать «червоні нулі» у методі?

Література [7]

Практична робота 16. Універсальний метод знаходження найкоротшого шляху.

Мета: набути практичні навички знаходження найкоротших відстаней методом Флойда

Задача

Дана транспортна мережа (рис.16.1).

Рис. 16.1 Транспортна мережа

Завдання

1. Відстані на малюнку розрахувати згідно свого варіанту.

2. Визначити найкоротші відстані між 1 та 11 вершинами транспортної мережі.

Методичні вказівки

Алгоритм Флойда. Цей алгоритм знаходить найкоротші шляхи між будь-якими двома вузлами мережі. У цьому алгоритмі мережа представлена у виді квадратної матриці з n рядками і n стовпцями. Елемент (i,j) дорівнює відстані dij від вузла і до вузла j, яке має кінцеве значення, якщо існує дуга (i,j), і дорівнює нескінченності в противному випадку.

Нехай є три вузли i, j та k і задані відстані між ними (рис. 16.2). Якщо виконується нерівність dij+ djk< dik, те доцільно замінити шлях ik шляхом ijk. Така заміна (далі її будемо умовно називати трикутним оператором) виконується систематично в процесі виконання алгоритму Флойда.

Рис. 16.2 Трикутний оператор.

Алгоритм Флойда вимагає виконання наступних дій.

Крок 0. Визначаємо початкову матрицю відстаней D0 матрицю послідовності вузлів S0. Діагональні елементи обох матриць позначаються знаком “”, що вказує: ці елементи в обчисленнях не фігурують. Припускаємо k=1.

Основний крок k. Задаємо рядок k як ведучий рядок і ведучий стовпець. Розглядаємо можливість застосування трикутного оператора до всіх елементів dij матриці Dk-1. Якщо виконується нерівність

dik+ dkj<dij, (ik, jk и ij),

тоді виконуються наступні дії:

а) створюємо матрицю Dk шляхом заміни в матриці Dk-1 елемента dij на суму dij- dkj.

b) створюємо матрицю Sk шляхом заміни в матриці Sk-1 елемента sij на k. Припускаючи k=k+1 повторюємо шаг k.

1

2

…

j

…

n

1

d12

…

d1j

…

d1n

2

d21

…

d2j

…

d2n

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

i

D0=

di1

di2

…

dij

…

din

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

n

dn1

dn2

…

dnj

…

1

2

…

j

…

n

1

2

…

j

…

n

2

1

…

j

…

n

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

i

S0=

1

2

…

j

…

n

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

n

1

2

…

j

…

Пояснимо дії, виконувані на k-м кроці алгоритму, представивши матрицю Dk-1 так, як вона показана на рис.16.3. На цьому малюнку рядок k є ведучим. Рядок i – будь-який рядок з номером від 1 до k-1, а строка p – довільний рядок з номером від k+1 до n. Аналогічно стовпець j представляє будь-який стовпець з номером від 1 до k-1, а стовпець q – довільний з номером від k+1 до n. Аналогічно стовпець j представляє будь-який стовпець з номером від k+1 до n. Трикутний оператор виконується в таким чином. Якщо сума елементів ведучих рядка і стовпця (показаних у квадратиках) менше елементів, що знаходяться на перетинанні стовпця і рядка (показаних у квадратиках) і відповідають розглянутим ведучим елементами, замінюються ці елементи визначеною сумою.

Після реалізації n кроків алгоритму визначення по матрицям Dn и Sn найкоротшого шляху між вузлами i та j виконується за наступними правилами.

Відстань між вузлами i та j дорівнює елементу dij в матриці Dn.

Проміжні вузли шляху від вузла i до вузла j визначається по матриці Sn. Пусть sij=k, тоді маємо шлях ikj. Якщо далі sik=k та skj=j, тоді вважаємо, що весь шлях визначений, тому що знайдені всі проміжні вузли. У противному випадку повторюємо описану процедуру для шляхів від вузла і до вузла k і від вузла k до вузла j.

Рис. 16.3 Геометрична інтерпретація ведучих: стовпця та рядка.