
- •Виды графов
- •Изоморфизм
- •Матричное задание графа
- •Свойства матрицы смежности
- •Операции над графами
- •Достижимость и связность
- •Матрицы достижимости и контрдостижимости
- •Нахождение сильных компонент
- •Конденсация графа
- •Базы и антибазы
- •Построение компонент связности в неориентированном графе
- •Построение компонент связности в ориентированном графе
- •Система независимых циклов
- •Дерево. Остов граф
- •Процесс восстановления дерева по набору
- •Алгоритм построения произвольного остова
- •Определение минимального остова
- •Алгоритм построения системы независимых циклов графа
- •Определение кратчайшего пути на графе методом Дейкстры
- •Модификация Форда
- •Алгоритмы поиска всех кратчайших путей
- •Алгоритм Флойда
- •Алгоритм Флойда
- •Алгоритм Данцига
- •Алгоритм Данцига
- •Раскраска
- •Метод построения функции Гранди на графе
- •Свойства хроматического числа
- •Гамильтоновы пути, контуры и задача Коммивояжера
- •Метод Роберта и Флореса (перебор-метод для орграфов)
- •Применение метода ветвей и границ к решению задачи Коммивояжера.
- •Потоковые алгоритмы
- •Алгоритм поиска увеличивающего пути
- •Алгоритм поиска максимального потока
- •Алгоритм Форда и Фалкерсона
- •Модификация алгоритма поиска максимального потока при нескольких источниках и стоках
- •Алгоритм поиска потока минимальной стоимости
- •Алгоритм поиска потока минимальной стоимости
- •Алгоритмы построения покрывающих деревьев
- •Алгоритм построения покрывающего дерева славик?!! последняя :-(
Алгоритм Форда и Фалкерсона
Выбрать любой начальный поток из вершины s в вершину t , то есть любой набор вершин , удовлетворяющий соотношениям (1-4). Можно, например, положить для всех дуг , что
.
Для всех дуг проделать следующее: если
, то положить
и считать дугу
; если
, то положить
и считать дугу
.
На множества I и R , сформированных на шаге 2 исходному графу, применить алгоритм поиска увеличивающего пути. Если при этом путь, который увеличивает поток, найти не удаётся, то заканчиваем процедуру алгоритма (текущий поток - максимальный), в противном случае надо осуществить максимально возможное увеличение потока вдоль найденного увеличивающего пути, а затем идти на шаг 2.
Пример: применить алгоритм поиска максимального потока к графу, изображённому на рисунке.
Рис. 63
Выполнение алгоритма начинается с задания начального потока: положим
.
Поскольку для всех дуг оказывается, что (пропускные способности дуг приведены на рисунке цифрами), следовательно,
, то
, то есть во всех дугах поток можно увеличить.
Окрашиваем вершину s. Она связана с вершинами а и b. Окрашиваем вершины а и b, дуги
. Вершина а связана с вершинами s, с и b. Так как вершины s и b уже окрашены, то окрашиваем вершину c и дугу
. Вершина с связана с вершинами а и t. Так как вершинa a уже окрашена, то окрашиваем вершину t и дугу
. Возвращаемся по окрашенным дугам из вершины t в вершину s. Получили увеличивающий поток
Определяем количество единиц. Возьмем
. Согласно пункту 3 алгоритма мы увеличиваем поток на единицу во всех дугах, принадлежащих этому пути,
Согласно алгоритму переходим на шаг 2.
Распределим дуги по множествам I и R (во множество I войдут дуги, не участвовавшие в пути на предыдущем шаге).
превращается в промежуточную дугу.
превращается в промежуточную дугу.
уменьшить можно, увеличить нельзя.
Определяем увеличивающий поток.
Окрашиваем вершину s. Она связана с вершинами а и b. Окрашиваем вершины а и b, дуги . Вершина а связана с вершинами s, с и b. Так как вершины s и b уже окрашены, то окрашиваем вершину c и дугу . Вершина с связана с вершинами а и t. Из вершины с в вершину t перейти нельзя, так как
, следовательно, переходим к вершине b, окрашиваем вершину t и дугу
. Возвращаемся по окрашенным дугам из вершины t в вершину s. Получили увеличивающий поток
Определяем количество единиц. Возьмём
и
Переходим на шаг 2.
2. Распределяем дуги по множествам I и R .
Переходим на шаг 3.
Применим алгоритм поиска увеличивающего пути для того чтобы определить увеличивающий поток.
Окрашиваем вершину s. Она связана с вершинами а и b. Окрашиваем вершины а и b, дуги . Вершина а связана с вершинами s, с и b. Так как вершины s и b уже окрашены, то окрашиваем вершину c и дугу . Вершина с связана с вершинами а и t. Из вершины с в вершину t перейти нельзя, так как , следовательно, переходим к вершине b, окрашиваем вершину t и дугу . Из вершины b в вершину t перейти также нельзя, так как
,
Следовательно, окрасить вершину t не удалось.
У нас найден максимальный поток 1+2=3,
который проходит по путям
и
.