Алгоритм форда - фалкерсона

Рассмотрим алгоритм Форда-Фалкерсона для фиксированной конфигурации сети.

Идея алгоритма

Алгоритм начинает работу с начального допустимого потока (возможно, нулевого). Затем осуществляются попытки увеличить величину потока с помощью систематического поиска всех возможных цепей из s в t, на которых можно увеличить величину потока (дополняющие цепи).

Поиск дополняющих цепей производится путем расстановки меток, которые указывают, на каких дугах и на сколько можно увеличить поток. Когда найдена одна из таких цепей, поток вдоль нее увеличивается. После чего все метки стираются, и вновь полученный поток используется в качестве исходного при новой расстановке меток.

Алгоритм заканчивает работу, когда нельзя найти ни одну дополняющую цепь. Последний найденный поток является максимальным.

Важной частью алгоритма является этап расстановки меток. Каждая вершина может находиться в одном из трех состояний:

· вершина помечена и просмотрена (т.е. вершина имеет метку и все смежные с ней вершины «обработаны»);

· вершина помечена, но не просмотрена (т.е. вершина имеет метку, но смежные с ней вершины не «обработаны»);

· вершина.

· не помечена;

Метка некоторой вершины алгоритм форда - фалкерсона - student2.ru имеет вид алгоритм форда - фалкерсона - student2.ru . Часть метки алгоритм форда - фалкерсона - student2.ru означает, что поток может быть увеличен вдоль дуги алгоритм форда - фалкерсона - student2.ru . Часть метки алгоритм форда - фалкерсона - student2.ru означает, что поток может быть уменьшен вдоль дуги алгоритм форда - фалкерсона - student2.ru . В обоих случаях алгоритм форда - фалкерсона - student2.ru показывает максимальную величину, на которую можно увеличить поток от алгоритм форда - фалкерсона - student2.ru к алгоритм форда - фалкерсона - student2.ru вдоль дополняющей цепи.

Сначала все вершины не имеют меток.

Описание алгоритма

Входными данными алгоритма являются:

· матрица пропускных способностей дуг

· начальный поток, задаваемый матрицей потоков дуг

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

Шаг 0.Инициализация.

Положим все дуговые потоки равными нулю: алгоритм форда - фалкерсона - student2.ru .

Шаг 1.Назначить вершине алгоритм форда - фалкерсона - student2.ru метку алгоритм форда - фалкерсона - student2.ru .

Теперь вершина алгоритм форда - фалкерсона - student2.ru помечена, но не просмотрена. Все остальные вершины не помечены.

Шаг 2.Просмотр помеченных вершин.

Выбрать некоторую помеченную, но не просмотренную вершину алгоритм форда - фалкерсона - student2.ru ; пусть ее метка будет алгоритм форда - фалкерсона - student2.ru .

1. Каждой непомеченной вершине алгоритм форда - фалкерсона - student2.ru , для которой алгоритм форда - фалкерсона - student2.ru , назначить метку алгоритм форда - фалкерсона - student2.ru , где

алгоритм форда - фалкерсона - student2.ru .

2. Каждой непомеченной вершине алгоритм форда - фалкерсона - student2.ru , для которой алгоритм форда - фалкерсона - student2.ru назначить метку алгоритм форда - фалкерсона - student2.ru , где

алгоритм форда - фалкерсона - student2.ru .

Теперь вершина алгоритм форда - фалкерсона - student2.ru помечена и просмотрена, а вершина алгоритм форда - фалкерсона - student2.ru , метка которой назначена в пунктах 1 или 2, помечена, но не просмотрена. Каким-либо образом отмечается, что вершина алгоритм форда - фалкерсона - student2.ru просмотрена.

Шаг 3. Проверка.

Если на Шаге 2 какая-либо вершина помечена, то:

· если помечена вершина алгоритм форда - фалкерсона - student2.ru , то на Шаг 4;

· если помечена любая другая вершина, то на Шаг 2.

Если на Шаге 2 нельзя назначить никаких меток, то алгоритм заканчивает работу с некоторым максимальным потоком.

Наши рекомендации