Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Теория графов.docx
Скачиваний:
12
Добавлен:
19.12.2018
Размер:
104.24 Кб
Скачать

Нахождение потока заданной мощности минимальной стоимости. Алгоритм Басакера-Гоуэна

Задана сеть, каждой дуге которой поставлено в соответствие 3 числа: с(х,у) – пропускная способность дуги, f(x,y) – поток по дуге, d(x,y) - стоимость провода единицы потока по дуге x,y. Требуется пропустить в сети поток заданной величины V или максимальный поток минимальной стоимости.

Алгоритм Басакера-Гоуэна

Шаг 0. Решение начинаем с нулевого потока V=0.

Шаг 1. Строим граф модифицированных стоимостей Gf по следующим правилам

1.Множество вершин графа Gf совпадает с множеством вершин графа G.

2.Если в графе G 0<f(x,y)<c(x,y) , тогда в графе строится 2 дуги: прямая, с длиной равной стоимости(e(x,y)=d(x,y)); e(x,y)=-d(x,y).

3.Если в графе G f(x,y)=0, то в графе Gf строится одна дуга e(x,y)=d(x,y).

4.Если f(x,y)=c(x,y), то рисуем e(x,y)=-d(x,y).

Шаг 2. Находим в графе Gf минимальный путь из S в T. Обозначим его P*. В исходном графе G определяем путь P, соответствующий Р*. На прямых дугах пути Р вычисляем €1=c(x,y)-f(x,y), €2=f(x,y), min €1. На прямых дугах +€, на обратных -.

Шаг 3. Получаем V=V*. Если в V = заданному потоку, то алгоритм свою работу заканчивает. В графе G построим поток мощности V min стоимости.

Замечание: Если задача на нахождение максимального потока мин стоимости, то алгоритм свою работу заканчивает когда в графе Gf нет ни одного пути Р* из S в T.

Алгоритм Клейна

Шаг 0. Решение начинаем с любого потока f, заданного с помощью алгоритма Форда-Фалкерсона. Вычисляем стоимость пропущенного потока f.

Шаг 1. Строим граф модифицированных стоимостей.

Шаг 2. Находим в графе Gf ориентированный цикл отрицательной длины p*. Если в Gf нет ни одного цикла отрицательной длины, то задача решена. Иначе переходим к шагу 3.

Шаг 3. В графе G определяем замкнутый путь p, соответствующий p*. Находим E. На прямых дугах пути p величину потока увеличиваем на У, а на обратных уменьшаем.

Шаг 4. Пересчитываем S и переходим к шагу 1.