
Задача о максимальном потоке в сети
Постановка задачи
Рассмотреть задачу о максимальном потоке в сети. Решить конкретную задачу на сети с 8-9 вершинами.
Исходные данные
Определить
максимальный поток в сети, изображенной
на Рисунке 6 из вершиныx0в вершинуx8, где
числа на дугах, снабженные стрелками,
означают пропускные способности этих
дуг в указанных направлениях.
Рисунок 6
Решение
Составим матрицу пропускных способностей дуг данной сети и представим сеть в матричной форме (см. Таблицу 1).
Таблица
1
-
xj
xi
x0
x1
x2
x3
x4
x5
x6
x7
x0
2
4
2-
x1
1
5
x2
3
x3
+
5
1
6-
x4
2
5
x5
4
1
3
x6
2
8
x7
+
5
2
В качестве начального возьмем нулевой поток z0ij= 0. Найдем какой-нибудь путь, идущий изx0вx7по ненасыщенным дугам. Для этого в нулевой строке таблицы выберем какой-нибудь элементcij, отличный от нуля, напримерc03. Из вершиныx0можно перейти вx3. Для наглядности дугу (x0,x3) проведем прямо в нулевой строке таблицы из нулевого столбца в 3-й. Теперь мы находимся в вершинеx3. Чтобы зафиксировать это, сместимся по пятому столбцу до строки с тем же 3-м номером. В 3-й строке имеется 3 ненулевых элемента соответственно в 4-м, 5-м и 7-м столбцах. Это означает, что изx3можно перейти или вx4, вx5или вx7. Пойдем в стокx7. Этот переход изображен стрелкой в 3-й строке с началом в 3-м столбце и концом в 7-м. Таким образом, по таблице пропускных способностей дуг сети мы нашли путь, ведущий по ненасыщенным дугам из источника в сток:
1= [x0,x3,x7].
Теперь по таблице надо узнать пропускную способность 1найденного пути и уменьшить пропускные способности всех дуг этого пути на1, а симметричных им дуг – увеличить на1. Для этого отмечаем знаком «-» числа в тех клетках, где находятся концы дуг, а числа в клетках, симметричных указанным относительно главной диагонали, отмечаем знаком «+». Пропускная способность найденного пути, очевидно, равна наименьшему среди чисел, отмеченных знаком «-» (Таблица 1).
1= 2
Из всех чисел, отмеченных знаком «-», вычитаем наименьшую пропускную способность 1. Получаем Таблицу 2. Это – сеть с измененными пропускными способностями дуг.
Таблица
2
-
xj
xi
x0
x1
x2
x3
x4
x5
x6
x7
x0
2
4-
x1
1
5
x2
+
3-
x3
2
5
1
4
x4
2+
5-
x5
4
1
3
x6
2
8
x7
2
5+
2
Ищем новый путь, идущий из источника в сток по ненасыщенным дугам и процедуру повторяем. Получаем путь 2и пропускную способность2:
2= [x0,x2,x4,x7]
2= 3
Далее
Таблица
3
-
xj
xi
x0
x1
x2
x3
x4
x5
x6
x7
x0
2-
1
x1
+
1
5-
x2
3
x3
2
5
1
4
x4
5
2
x5
4+
1
3-
x6
2+
8-
x7
2
8
2+
3 = [x0, x1, x5, x6, x7]
3 = 2
Таблица4
-
xj
xi
x0
x1
x2
x3
x4
x5
x6
x7
x0
1
x1
2
1
3
x2
3
x3
2
5
1
4
x4
5
2
x5
6
1
1
x6
4
6
x7
2
8
4
Из Таблицы 4 видно, что не существует ни одного пути из источника в сток. (Из x0можно перейти только вx2, а оттуда – обратно вx0). Следовательно, увеличить поток нельзя.
Для определения величины полученного максимального потока вычитаем из элементов Таблицы 1 соответствующие элементы Таблицы 4. Записывая только положительные из найденных разностей, получаем Таблицу 5, указывающую максимальный поток в заданной сети с величиной
w* =z37+z47+z67=1+2+3= 7
Таблица
5
-
xj
xi
x0
x1
x2
x3
x4
x5
x6
x7
x0
2
3
2
x1
2
x2
3
x3
2
x4
3
x5
2
x6
2
x7