Требуется, расставляя пометки в графе с заданным потоком с помощью алгоритма, описанного в теореме Форда-Фалкерсона, найти максимальный поток между вершиной с номером 1 и вершиной с максимальным номером, если улучшенный поток окажется максимальным, то нужно указать то минимальное сечение, которому равен наш поток (если же улучшенный поток не окажется максимальным, то нужно снова его улучшать до тех пор, пока не окажется он максимальным).
Решение
Первоначально поток в сети нулевой, т.е. величина потока в каждом ребре равен нулю. Источником является вершина s=1, а стоком t=6.
Строим увеличивающую цепь, соединяющую источник s со стоком t. В общем случае в эту цепь могут входить как прямые, так и обратные дуги.
Для построения такой цепи и последующего решения задачи, для каждой дуги (x,y) сети находят две величины: i(x,y)=c(x,y)-f(x,y), r(x,y)=f(x,y). Здесь i(x,y) - величина, на которую может быть увеличен поток в дуге (x,y), а r(x,y) - величина, на которую может быть уменьшен поток в этой дуге.
В процессе решения задачи дуги сети делятся на:
* увеличивающие - такие, для которых i(x,y)>0, т.е. поток в них может быть увеличен; множество таких дуг обозначают через I;
* уменьшающие - такие, для которых r(x,y), т.е. поток в них может быть уменьшен; множество таких дуг обозначают через R.
Дуги, принадлежащие множествам I и R называют промежуточными.
Если построена некоторая увеличивающая цепь, то величина, на которую может быть увеличен поток в сети вдоль данной цепи равна наименьшему из чисел i(x,y) для всех прямых дуг цепи и r(x,y) для всех обратных дуг цепи.
Чтобы увеличить поток в сети вдоль найденной увеличивающей цепи, необходимо увеличить поток, проходящий через каждую прямую дугу цепи, на величину ∆F и на эту же величину уменьшить поток, проходящий через каждую обратную дугу цепи.
Для построения увеличивающей цепи может быть использован следующий алгоритм.
Шаг 1
. В сети определить состав множеств I и R.
Шаг 2. Пометить вершину x=s.
Шаг 3. Пусть x - последняя помеченная вершина. Выбрать непомеченную вершину y и рассмотреть дугу (x,y) или дугу (y,x), если она не помечена. Если такой вершины y нет, или каждая из упомянутых дуг помечена, то вернуться к вершине, из которой была достигнута вершина x. Если x=s, то возврат невозможен и увеличиваю цепь построить нельзя.
Пусть найдена непомеченная вершина y. Тогда
а) если непомеченная дуга (x,y) принадлежит множеству I, то пометить вершину y и дугу (x,y);
б) если непомеченная дуга (y,x) принадлежит множеству R, то пометить вершину y и дугу (y,x).
Положить x=y.
Шаг 4