Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Учебное пособие 3000478.doc
Скачиваний:
42
Добавлен:
30.04.2022
Размер:
6.21 Mб
Скачать

2. Нахождение кратчайших путей. Алгоритм Беллмана-Мура

Веса дуг могут быть и отрицательными.

Этап 1. Нахождение длин кратчайших путей от вершины s до всех остальных вершин графа.

Шаг 1. Присвоение начальных значений. - множество вершин в очереди.

Шаг 2. Корректировка меток и очереди.

Удаляем из очереди Q вершину, находящуюся в самом начале очереди. Для каждой вершины хi, непосредственно достижимой из , корректируем её метку по формуле

.

Если при этом , то корректируем очередь вершин, иначе продолжаем перебор вершин и корректировку временных меток.

Корректировка очереди. Если хi не была ранее в очереди и не находится в ней в данный момент, то ставим её в конец очереди. Если хi уже была когда-нибудь ранее в очереди или находится там в данный момент, то переставим её в начало очереди.

Шаг 3. Проверка на завершение 1-го этапа.

Если , то возвращаемся к началу 2-го шага; если же , то 1-ый этап закончен, т.е. минимальное расстояние от s до всех вершин графа найдены.

Этап 2. Построение кратчайшего пути от s до t.

Совпадает с соответствующим этапом в алгоритме Дейкстры и выполняется по формуле

Пример. Задана весовая матрица Ω сети G:

Рис. 35

Рассчитать кратчайший путь от узла х1 до узла х6.

Решение.

Этап 1. Первая итерация.

Шаг 1.

Шаг 2. множество вершин непосредственно достижимых из вершины .

х2 надо было поставить в конец очереди, но Q было пусто, поэтому конец очереди совпал с началом.

Шаг 3. Нет. Переход на начало 2-го шага.

Вторая итерация.

Шаг 2.

Вершину х4 надо поставить в начало очереди, но она уже стоит там.

Шаг 3. Нет, переход на третью итерацию 2 –го шага.

Третья итерация.

Шаг 2.

Вершину х3 надо ставить в начало очереди, но она уже там.

Вершину х5 передвигаем из конца очереди в начало.

Шаг 3. Нет, переход на четвёртую итерацию 2 –го шага.

Четвёртая итерация.

Шаг 2.

Шаг 3. Нет.

Пятая итерация.

Шаг 2.

Шаг 3. Нет.

Шестая итерация.

Шаг 2.

Q содержало только вершину x6 и она встала в начало очереди.

Шаг 3. Нет.

Седьмая итерация.

Шаг 2.

Шаг 3. Конец 1-го этапа. Найдены минимальные расстояния до всех вершин от первой. Эти расстояния таковы:

Этап 2.

Шаг 4. Полагаем . Пусть - множество вершин, непосредственно предшествующих . .

Первая итерация.

или

Включаем дугу (х5, х6) в кратчайший путь. . Возвращаемся на 4-ый шаг.

Вторая итерация. Нет.

; ,

.

Включаем дугу (х3, х5) в кратчайший путь. .Возвращаемся на 4-ый шаг.

Третья итерация. Нет.

.

. Включаем дугу (х4, х3) в кратчайший путь. . Возвращаемся на 4-ый шаг.

Четвёртая итерация. Нет. .

. Включаем дугу (х2, х4) в кратчайший путь . Возвращаемся на 4-ый шаг.

Пятая итерация. Нет. .

. Включаем дугу (х1, х2) в кратчайший путь . Возвращаемся на 4-ый шаг.

Шестая итерация. Да. Задача закончена. Искомый кратчайший путь от вершины х1 до вершины х6 имеет нулевой вес и состоит из следующих дуг: