Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Copy of 5 и 68_KommiOptimaFletCl.doc
Скачиваний:
2
Добавлен:
01.07.2025
Размер:
307 Кб
Скачать
☆

Оптимизация пути в графах с контурами.

Для графов с контурами поиск максимального пути затруднён, т.к. он может не существовать. Для отыскания минимального пути существуют разные алгоритмы.

Алгоритм Форда.

Общая постановка задачи:

Задан произвольный связный орграф, каждой дуге которого приписано положительное число. Найти минимальный путь между двумя вершинами графа.

Примечание: Порядковая функция графа не задана.

Решение: Для поиска минимального пути между x0 и xn руководствуются следующими правилами:

1. Вершине x0 приписывается метка 0=0. Всем остальным xi приписывается i=.

2. Выбирается произвольная дуга x0xi и вершине xi приписывается метка i=0+l(x0,xi), где l(x0,xj) - вес дуги между x0 и xi.

3. Для вершины xj с меткой j ищется вершина xi, от которой идёт такая дуга в xj, что jj и где: j=i+l(xi,xj).

Вершине xj приписывается метка j.

4. После разметки всех вершин графа для произвольной вершины xj с меткой j рассматриваем все вершины xi с дугами, ведущими в вершину xj , и выбирается новая метка jj и такая, что j является минимальной из всех возможных меток.

5. Процедура пункта 4 проводится для каждой вершины графа возможно и не один раз, пока не будут получены минимальные метки у каждой вершины графа.

6. Выбор минимального пути осуществляют по правилам получения минимального пути для графа без контуров.

Пример.

Найти минимальный путь из x0 в x6.

1 шаг. Вершине x0 приписывается метка 0=0. Всем остальным xi приписывается i=.

2 шаг. Рассматриваем вершину x1 и дугу x0x1 . Вершине x1 приписываем метку 1=0+l(x0,x1)=0+4=4.

3 шаг. Рассматриваем вершину x3 и дугу x0x3 . Тогда 3=0+l(x0,x3)=0+2=2.

4 шаг. Рассматриваем вершину x2 и дугу x0x2 . Тогда 2=0+l(x0,x2)=0+5=5.

5 шаг. Рассматриваем вершину x5 и дугу x0x5 . Тогда 5=0+l(x0,x5)=0+4=4.

6 шаг. Рассматриваем вершину x4 и дугу x1x4 . Тогда 4=1+l(x1,x4)=4+2=6.

7 шаг. Рассматриваем вершину x6 и дугу x4x6 . Тогда 6=4+l(x4,x6)=6+1=7.

Разметка вершин показана на рисунке кружками. Выбор дуги (xi,xj) при разметке вершины xj осуществляется совершенно произвольно. Единственное ограничение: метка i вершины xi не должна быть равна .

8 шаг. Рассматриваем вершину x2 и стремимся уменьшить её метку. Для этого рассматриваем все дуги, ведущие в x2: выписываем все возможные выражения для метки 2: 2=0+l(x0,x2)=0+5=5.

2=3+l(x3,x2)=2+1=3.

2=min=3, поэтому заменяем метку вершины x2 на 3.

9 шаг. Аналогично для x4 : 4=1+l(x1,x4)=4+2=6.

4=2+l(x2,x4)=3+2=5.

4=min=5, поэтому заменяем метку вершины x4 на 5.

10 шаг. Аналогично для x5 : 5=3+l(x3,x5)=2+1=3.

5=4+l(x4,x5)=5+2=7.

5=min=3, поэтому заменяем метку вершины x5 на 3.

11 шаг. Аналогично для x6 : 6=4+l(x4,x6)=5+1=6.

6=2+l(x2,x6)=3+3=6.

6=5+l(x5,x6)=3+5=8.

6=min=6, поэтому заменяем метку вершины x6 на 6.

12 шаг. Для x1 понижение невозможно.

Дальнейшее понижение меток вершин невозможно, поэтому прекращаем разметку.

13 шаг. Ищем минимальный путь из x6 в x0 .

(x6 , x4 , x2 , x3 , x0) длина пути: 2+1+2+1=6

(x6 , x2 , x3 , x0) длина пути: 3+2+1=6

Пример для самостоятельной работы:

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