Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Семестровая 1 (Методы оптимальных решений) / Методы оптимальных решений учебное пособие

.pdf
Скачиваний:
1245
Добавлен:
19.04.2015
Размер:
6.01 Mб
Скачать
(X k , X n )
X 0 , X 1 ,

§ 8.3. ПОТОКИ ВСЕТЯХ

Пусть дана некоторая совокупность географических пунктов, связанных между собой автомобильными или железными дорогами. При планировании перевозок часто возникает задача об организации максимального потока грузов (т. е. перевозки максимального количества грузов в единицу времени) из одного пункта в другой с учетом того обстоятельства, что пропускная способность каждой дороги ограничена. Сформулируем эту задачу математически.

Каждая совокупность пунктов вместе с соединяющими их дорогами схематически может быть изображена в виде некоторой сети, в которой линии соответствуют дорогам, а пересечения — отдельным пунктам или станциям. Поэтому рассмотрим ориентированный граф с n +1 вершиной

X 2 , , X n , где некоторые упорядоченные пары точек (Xi , X j ) соединены дугами uij , причем каждой такой дуге поставлено в соответствие неотрица-

тельное число cij = c(uij ) , называемое ее пропускной способностью.

Зафиксируем какие-нибудь две вершины графа, например, X 0 и X n . По путям m{X 0 , X i , X j , , X k , X n} составленным из дуг (X 0 , Xi ), (Xi , X j ), , сети и не образующих контуров, направляется жидкость, газ или транспорт из точки X 0 сети в точку X n . Назовем X 0 входом сети, X n выходом. Пропускная способность cij дуги ( X i , X j ) определяет максимальное ко-

личество вещества, которое может пропустить эта дуга за единицу времени. Если какая-то пара точек X k , X l не соединена дугой, то будем считать ckl = 0 . Кроме того, будем считать рассматриваемый граф симметрическим, т. е. если в сеть входит дуга (Xi , X j ), то в нее входит и симметричная дуга (X j , Xi ), при-

чем пропускные способности этих дуг могут быть различными: cij ¹ c ji .

Потоком zij по дуге (Xi , X j ) называется количество вещества, про-

ходящее через эту дугу в единицу времени. Потоком по сети, или просто потоком, назовем совокупность {zij } потоков по всем дугам сети. Будем

считать, что потоки удовлетворяют следующим ограничениям:

0 zij cij ,

i, j = 0, 1, 2, , n,

i ¹ j ,

(8.3.1)

n−1

n

 

 

 

 

zik

zkj

= 0,

k =1, 2,, n −1.

(8.3.2)

j=0

j=1

 

 

 

 

Ограничения (8.3.1) означают, что поток по любой дуге неотрица-

телен и не превышает пропускной способности дуги.

 

В уравнениях (8.3.2) уменьшаемая сумма

z0k + z1k + + zn−1,k пред-

ставляет количество вещества, притекающего в вершину X k

по всем входя-

щим в эту вершину дугам (если из X l

в X k не входит дуга, то zlk = 0 ), а вы-

241

читаемая сумма zk 1 + zk 2 + + zkn представляет количество вещества, вытекающего из вершины X k по всем выходящим из этой вершины дугам (также

zkl = 0 , если нет дуги ( X k , X l ) .

Таким образом, ограничения (8.3.2) означают, что количество вещества, притекающего в произвольную точку сети (кроме X 0 и X n ), равно количеству вещества, вытекающего из этой точки. Поток, удовлетворяющий ограничениям (8.3.1) и (8.3.2), будем называть допустимым.

Из ограничений (8.3.2) также следует, что общее количество вещества

n

 

 

z0 j , вытекающего из вершины X 0

(входа сети), совпадает с общим количе-

j=1

 

 

n−1

 

 

ством вещества zin , притекающего в вершину X n

(выход сети), т. е.

i=0

 

 

n

n−1

 

z0 j

= zin = w.

(8.3.3)

j=1

i=0

 

Линейная функция w называется величиной потока в сети.

Таким образом, задача о максимальном потоке в сети представляет собой задачу линейного программирования: среди всех решений системы линейных ограничений (8.3.1)—(8.3.2) следует найти такое решение, которое максимизирует линейную форму (8.3.3). Это решение zij называется

максимальным потоком в сети.

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

Введем некоторые дополнительные понятия. Разобьем множество всех вершин сети на два непересекающихся подмножества P и Q так, чтобы X 0 P , a X n Q . Сечением (P, Q) сети назовем совокупность всех дуг

( Xi , X j ) , концы которых принадлежат разным подмножествам. Каждому сечению (P, Q) поставим в соответствие число C (P,Q) пропускную способность сечения, — равное сумме пропускных способностей всех дуг сети, начинающихся в P и кончающихся в Q, т. е.

C(P,Q) = cij .

X i P

X j Q

Любой путь из X 0 в X n обязательно содержит хотя бы одну дугу сечения (P, Q) , которая начинается в P и кончается в Q . Но пропускная способность пути не превышает пропускной способности каждой его дуги. Поэтому величина любого потока из X 0 в X n , являющаяся суммарной пропускной способностью всех путей из X 0 в X n , не может превысить пропускной способности любого сечения (P, Q) , т. е. всегда

242

w C (P, Q) .

Отсюда заключаем, что если удается построить такой поток {zij }, при котором величина его w окажется равной пропускной способности некото-

рого сечения (P , Q ) , т. е. w = C (P ,Q ), то этот поток будет максималь-

ным, а (P ,Q ) — сечением с минимальной пропускной способностью.

Введем еще одно понятие. Пусть задан некоторый поток {zij } . Бу-

дем говорить, что дуга uij с началом в X i и концом в вершине X j является

насыщенной, если zij = cij , т. е. величина потока по этой дуге равна про-

пускной способности дуги. Если же величина потока по дуге меньше пропускной способности дуги zij < cij , то такую дугу называют ненасыщенной.

Наиболее удобен следующий алгоритм решения задачи о максимальном потоке.

АЛГОРИТМ ФОРДА — ФАЛКЕРСОНА.

1.Построить какой-нибудь начальный поток {zij0}.

2.Проверить, можно ли построить путь из X 0 в X n , состоящий только из ненасыщенных дуг. Если нет, то построенный ранее поток максимален. Если да, то перейти к п. 3.

3.Выделить какой-нибудь путь, ведущий из X 0 в X n по ненасыщен-

ным дугам, найти минимальную пропускную способность дуг этого пути θ и увеличить поток через каждую дугу этого пути на θ . Построить новый поток. Перейти к п. 2.

Алгоритм может остановиться в том случае, если не удается построить

путь из X 0 в X n по ненасыщенным дугам. В противном случае алгоритм может быть продолжен. При этом на каждом шаге образуется по крайней мере одна новая насыщенная дуга. Так как число дуг в сети конечно, то п. 3 может выполняться лишь конечное число раз, поэтому указанный алгоритм обязательно построит максимальный поток, и притом за конечное число шагов.

Следует обратить особое внимание на выполнение п. 3. Если по некоторому пути μ мы пропустили поток величиной θ, то пропускные способности всех дуг этого пути следует уменьшить на θ, т. е. новая пропускная

способность дуги

(

X

, X

j )

пути будет равна c

= c − θ . Эта дуга может

 

i

 

ij

ij

участвовать в последующем выборе нового пути,

но с у м е н ь ш е н н о й

пропускной способностью. Поэтому вычисление новых пропускных способностей всех звеньев найденного пути совершенно необходимо. Кроме того, надо также учесть возможность существования вместо найденного пути другого, в котором участвует некоторая дуга, симметричная одной из дуг предыдущего пути. Для этого пропускные способности всех дуг, симметричных дугам старого пути ν, следует увеличить на θ, т. е. пропускную способность дуги ( X j , Xi ) , симметричной использованной в предшествующем

243

пути дуге ( Xi , X j ) , надо считать равной cji = c ji + θ . Это следует из того,

что дуга ( X j , Xi ) не препятствует доставке в X i количества cji вещества по

новому пути с использованием этой дуги плюс количества θ по части старого пути от X 0 до X i без использования этой дуги (так как пропускная

способность всех дуг старого пути не меньше θ). Мы учитываем, что X i те-

перь соединена с X 0 двумя путями, т. е. получается, что дуга ( X j , Xi ) как бы заменена новой дугой с увеличенной пропускной способностью c ji + θ .

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

1. Построить произвольный путь μ из X 0 в X n , идущий по н е н а -

с ы щ е н н ы м дугам.

2.Определить пропускную способность θμ найденного пути как наименьшую из пропускных способностей дуг этого пути

θμ = min{cμ};

(8.3.4)

ij

 

3.Вычислить новые пропускные способности всех дуг данного пути:

μ

= c

μ

μ

(8.3.5)

c

 

− θ ;

ij

ij

 

 

4.Вычислить новые пропускные способности всех тех дуг, которые симметричны дугам данного пути

μ

= c

μ

+ θ

μ

(8.3.6)

c

ji

ji

;

 

 

 

 

 

5.Процесс, описанный в пп. 2—4, продолжается до тех пор, пока удается построить путь из X 0 в X n , идущий по ненасыщенным дугам. Если

такой путь построить нельзя, то это означает, что из источника X 0 в сток пропущен максимальный поток. Затем следует вычесть пропускную способность соответствующей дуги исходной сети. П о - л о ж и т е л ь н ы е значения найденных разностей определяют величины потоков по дугам в максимальном потоке данной сети, а величина максимального потока в сети равна

n

n−1

w = zoj

= zin .

j=1

i=0

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

Покажем, что полученный таким образом поток является максимальным. Для этого построим в последней сети сечение (P, Q) следующим образом. Ко множеству P отнесем источник X 0 и все те вершины, которые достижимы из X 0 по какому-нибудь пути, составленному из нена-

244

сыщенных дуг, а все остальные вершины сети (недостижимые) отнесем к множеству Q. Очевидно, X n Q , так как не существует никакого ненасыщенного пути из X 0 в X n .

Все дуги сечения , направленные из P в Q , загружены полностью до пропускных способностей [т. е. для величины потока zij по дуге

(Xi , X j ) при X i P, X j Q имеем zij

= cij ], а дуги (X j , Xi ) противополож-

ного направления, идущие из Q в P , в построенном потоке не использу-

ются (т. е. z ji = 0 при X j Q, X i P), так что величина потока равна

w = zij z ji = cij = C(P,Q) ,

X i P

X i P

X i P

X j Q

X j Q

X j Q

т. е. построенный поток максимален, а (P, Q) — сечение с минимальной пропускной способностью (минимальное сечение).

ПРИМЕР 8.3.1. Требуется определить максимальный поток в сети, изображенной на рис. 8.3.1, из вершины X 0 в вершину X8 , где числа на дугах, снабженные стрелками, означают пропускные способности этих дуг в указанных направлениях.

 

 

 

X5

 

 

 

 

 

 

3

3

2

 

 

4

 

 

 

 

 

 

 

 

 

 

5

 

 

X4

 

 

2

 

 

 

1

 

 

 

 

 

 

 

 

 

 

1

 

 

 

 

1

 

 

1

 

 

1

 

 

2

 

6

 

 

 

 

X0

X1

 

 

2

X6

X8

 

0

1

 

 

2

 

 

 

 

 

 

 

 

 

 

3

 

 

4

 

0

 

3

 

2

 

 

X3

 

 

 

 

 

2

2

2

 

 

 

 

0

2

 

0

 

 

 

 

X2

 

3

 

X7

 

 

 

 

2

 

 

 

 

 

 

 

Рис. 8.3.1. Транспортная сеть

Решение. В качестве начального возьмем нулевой поток, когда все zij = 0 . Найдем какой-нибудь путь из X 0 в X8 , например, μ1 = { X 0 , X 5 , X 8 } . По этому пути можно пропустить поток величиной не более

θ1 = min{c05 , c58} = min{5, 2} = 2 .

Предположим, что поток такой величины 2 по указанному пути мы пропустили. Получили новый поток {zij′} . При этом пропускные способно-

сти дуг пути и симметричных им дуг изменяются. Согласно (8.3.5) и (8.3.6) пропускные способности дуг пути уменьшаются на 2 единицы:

c

= c

05

− θ

1

= 5 − 2 = 3, c

= c

58

− θ = 2 − 2 = 0 ,

05

 

 

58

 

1

245

т. е. дуга ( X 5 , X 8 )

становится насыщенной, а пропускные способности дуг,

симметричных дугам пути, увеличиваются на 2 единицы:

c

= c

50

+ θ = 4 + 2 = 6, c

= c

85

+ θ = 2 + 2 = 0 .

50

 

1

85

 

1

Сеть с новыми пропускными способностями дуг приведена на рис. 8.3.2, а.

Теперь находим новый путь из X 0 вX8 , проходящий по ненасыщенным дугам, например, μ 2 = { X 0 , X 5 , X 4 , X 6 , X 8 } , определяем

θ2 = min{c05 , c54 , c46 , c68 } = min{3, 3, 1, 6} = 1

ипропускаем по этому пути поток величиной в одну единицу. Меняем пропускные способности дуг этого пути и симметричных им дуг:

c′′

= c

− θ

2

= 3 − 1 = 2, c′′

= c

+ θ

2

= 6 + 1 = 7,

05

05

 

 

 

50

50

 

 

 

c′′

= c

− θ

2

= 3

− 1

= 2, c′′

= c

+ θ

2

= 3 + 1 = 4,

54

54

 

 

 

45

45

 

 

 

c′′

= c

− θ

2

= 1 − 1 = 0, c′′

= c

+ θ

2

= 1 + 1 = 2,

46

46

 

 

 

64

64

 

 

c′′

= c

− θ

2

= 6

− 1

= 5, c′′

= c

+ θ

2

= 2 + 1 = 3.

68

68

 

 

 

86

86

 

 

 

Дуга ( X 4 , X 6 ) становится насыщенной. Сеть с измененными про-

пускными способностями приведена на рис. 8.3.2, б.

 

 

Далее последовательно находим пути μ3 , μ4 , μ5 , μ6

и по ним пропус-

каем потоки величиной θ3 , θ4 , θ5 , θ6

соответственно:

 

 

μ3 = { X 0 , X 5 , X 4 , X 1 , X 6 , X 8 },

θ3

= min{2, 2, 1, 2,

5} = 1

(рис. 8.3.2, в),

μ 4

= { X 0 , X 1 , X 6 , X 8 },

θ4

= min{1, 1,

4} = 1

(рис. 8.3.2, г),

μ5

= { X 0 , X 2 , X 7 , X 8 },

θ5 = min{4,

3,

2} = 2

(рис. 8.3.2, д),

μ 6 = { X 0 , X 2 , X 3 , X 6 , X 8 },

θ6

= min{2,

2,

3, 3} = 2 (рис. 8.3.2, е).

На указанных в скобках рисунках приведены сети, полученные после соответствующих преобразований на каждом шаге. В сети, изображенной на рис. 8.3.2, е, уже нельзя указать ни одного пути, идущего из X 0 в X8 по ненасыщенным дугам. Следовательно, процесс преобразований закончен.

Чтобы определить максимальный поток, вычитаем от пропускных способностей дуг исходной сети (рис. 8.3.1) измененные пропускные способности тех же дуг последней сети (рис. 8.3.2, е). Результат приведен на рис. 8.3.2, ж.

Положительные значения найденных разностей дают нам величины zij потоков по соответствующим дугам ( X i , X j ) в максимальном потоке из

источника X 0 в сток X8 .

Искомый максимальной поток приведен на рис. 8.3.2, з, где числа, стоящие у каждой дуги, показывают величину потока по данной дуге, а стрелки — направление потока по этой дуге.

246

 

 

 

 

X5

 

 

 

 

3

 

3

 

 

6

 

 

 

 

3

 

 

X4

 

 

 

 

 

1

 

 

 

1

 

 

 

 

1

 

 

 

 

1

 

2

 

 

X0

0

X1

1

 

2

 

 

 

 

 

 

 

 

 

4

 

0

 

3

 

 

X3

 

 

 

 

 

 

 

 

 

 

 

0

2

0

 

 

 

 

X2

 

3

 

 

 

 

 

2

 

 

 

 

 

а)

 

 

 

X5

 

 

 

2

 

4

 

 

7

 

 

 

2

 

X4

 

 

 

 

0

 

 

 

 

 

 

1

 

 

 

 

1

 

 

 

1

2

 

 

X0

0

X1

 

2

 

1

 

 

 

 

 

 

4

0

 

3

 

X3

 

 

 

 

 

 

 

 

02 0

3

X2

2

б)

247

 

 

 

 

 

 

 

X5

 

 

 

 

 

 

 

1

 

5

 

0

 

 

 

8

 

 

 

 

 

 

 

 

 

 

 

 

 

4

 

1

 

 

X4

 

 

 

 

 

 

 

0

 

 

 

 

 

 

 

 

 

 

 

 

 

 

0

 

 

1

 

 

 

 

2

 

 

 

 

6

 

0

 

0

 

 

 

 

 

 

 

 

 

X6

X8

X0

1

X1

 

 

4

 

 

2

 

1

 

 

3

 

 

 

 

 

 

 

 

 

 

2

 

2

 

0

 

3

 

 

 

 

X3

 

2

2

2

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

2

2

0

 

 

 

X7

 

 

 

X2

 

1

 

 

 

 

 

 

 

4

 

 

 

 

 

 

 

 

д)

 

 

 

 

 

 

 

X5

 

 

 

 

 

 

 

1

 

5

 

0

 

 

 

8

 

 

 

 

 

 

 

 

 

 

 

 

 

4

 

1

 

 

X4

 

 

 

 

 

 

 

0

 

 

 

 

 

 

 

 

 

 

 

 

 

 

0

 

 

2

 

 

 

 

2

 

 

 

 

5

 

0

 

0

 

 

 

 

 

 

 

 

 

X6

X8

X0

1

X1

 

 

4

 

 

3

 

1

 

 

3

 

 

 

 

 

 

 

 

 

 

2

 

0

 

0

 

1

 

 

 

 

X3

 

2

2

2

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

4

0

2

 

 

 

X7

 

 

 

X2

1

 

 

 

 

 

 

 

 

4

 

 

 

 

 

 

 

 

е)

 

0

 

 

 

4

2

 

3

 

 

 

X6

X8

 

 

5

3

 

 

 

 

4

2

2

0

X7

 

0

 

 

 

4

2

 

1

 

 

 

X6

X8

 

 

7

5

 

 

 

 

4

2

2

0

X7

248

X5

X5

 

 

 

1

 

5

 

 

 

 

 

(+2)

 

(–2)

 

 

 

8

 

 

 

0

 

 

 

(–4)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

1

 

 

X4

 

 

4

 

(+4)

 

 

X4

 

 

 

 

 

 

0

 

 

 

 

 

(+1)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

0

 

 

 

 

 

 

 

(+1)

 

 

 

 

2

 

 

2

 

 

 

 

(–1)

 

 

 

 

 

1

 

1

 

 

4

 

(+1)

 

(+2)

 

 

(–1)

 

 

 

 

 

 

 

 

 

X0

0

X1

 

 

3

X6

X8

X0

 

X2

 

 

(–2)

 

 

 

1

 

 

4

 

 

(–1)

0

 

 

 

 

 

 

 

3

 

 

 

 

 

 

 

(+2)

(–2)

 

 

 

 

 

3

 

 

 

(+4)

 

 

 

 

4

 

0

 

 

2

 

 

0

 

 

 

 

 

X3

 

 

 

 

 

X3

 

 

 

 

 

 

2

2

2

 

 

 

 

 

0

 

 

 

 

 

 

 

 

 

 

 

 

0

2

0

 

 

 

 

 

(–4)

(+2)

(–2)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

X2

 

3

 

X7

 

 

 

X1

(+2)

 

 

 

 

 

 

 

2

 

 

 

 

 

(–2)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

(+2)

 

(–2)

 

(+5)

X6

X8

 

(–5)

(–2)

0 (+2)

X7

в)

ж)

 

 

 

X5

 

 

 

 

 

 

 

X5

 

 

 

 

1

 

5

 

 

 

 

 

 

2

 

 

 

 

 

 

 

0

 

 

 

 

 

 

 

2

 

8

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

1

 

 

X4

 

 

4

 

 

4

 

X4

 

 

 

 

 

0

 

 

 

 

 

1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

0

 

 

 

 

 

 

 

 

1

 

 

 

2

 

 

2

 

 

 

 

 

 

 

 

 

0

 

0

 

 

3

 

 

1

2

 

5

5

 

 

 

 

 

 

 

X0

X1

 

 

4

X6

 

X8

X0

X1

 

 

X6

X8

 

1

1

 

 

 

5

 

 

 

 

 

 

 

 

 

3

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

4

 

0

 

3

 

 

2

 

4

 

 

2

 

 

X3

 

 

 

 

 

 

X3

 

 

 

 

 

2

2

2

 

 

 

 

 

2

 

 

 

 

 

 

 

 

 

 

0

2

0

 

 

 

 

 

 

 

2

 

 

 

 

X2

3

 

 

X7

 

 

 

X2

 

2

X7

 

 

 

 

2

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

г)

 

 

 

 

 

 

 

 

 

з)

 

Рис. 8.3.2. Определение максимального потока в сети

Величина максимального потока равна

wmax = θ1 + θ2 + θ3 + θ4 + θ5 + θ6 = 2 + 1 + 1 + 1 + 2 + 2 = 9

или, как видно из рис. 8.3.2, з,

wmax = z05 + z01 + z02 = 4 + 1+ 4 = 9, wmax = z58 + z68 + z78 = 2 + 5 + 2 = 9.

Обычно процесс решения задачи записывают в виде последовательности матриц изменяющихся пропускных способностей дуг сети. Чтобы не писать нулевые элементы этих матриц, удобно для каждого шага чертить соответствующую таблицу, оставляя пустыми те клетки, где должны стоять нули. Для исходной сети, приведенной на рис. 8.3.1, матрица пропускных способностей дуг будет иметь вид табл. 8.3.1.

 

 

 

 

 

 

Т а б л и ц а

8.3.1

 

Xj

X0

X1

X2

X3 X4 X5 X6 X7 X8

 

Xi

 

 

 

 

 

 

 

 

 

 

 

 

X0

 

 

1

4

 

5–

 

 

 

 

X1

 

 

 

 

1

1

2

 

 

 

X2

 

 

 

 

2

 

 

3

 

 

X3

 

 

 

 

 

 

3

 

 

 

X4

 

 

1

 

 

3

1

 

 

 

X5

 

4+

 

 

 

3

 

 

2

 

X6

 

 

2

 

3

1

 

2

6

 

X7

 

 

 

2

 

 

2

 

2

 

X8

 

 

 

 

 

2+

2

2

 

 

 

 

 

 

 

Т а б л и ц а

8.3.2

 

Xj

X0

X1 X2 X3 X4 X5 X6 X7 X8

 

Xi

 

 

 

 

 

 

 

 

 

 

 

X0

 

 

1

4

 

3

 

 

 

X1

 

 

 

1

1

2

 

 

 

X2

 

 

 

2

 

 

3

 

 

X3

 

 

 

 

 

3

 

 

 

X4

 

 

 

 

 

3+ 1

 

 

 

X5

 

6+

 

 

3

 

 

 

 

X6

 

 

2

3

1+

 

2

6

 

X7

 

 

 

2

 

2

 

2

 

X8

 

 

 

 

 

4 2+

2

 

 

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

В нулевой строке таблицы выберем какой-нибудь элемент c0j, отличный от нуля, например, c05, стоящий в пятом столбце. Из вершины X0 можно перейти в X5. Для наглядности дугу (X0, X5) проведем прямо в нулевой строке таблицы из нулевого столбца в пятый, выделив начало дуги кружочком, конец — стрелкой. Теперь мы находимся в вершине X5. Чтобы зафиксировать это, сместимся по пятому столбцу до строки с тем же пятым номером и отметим эту клетку кружочком, а переход по вертикали — пунктиром. В пятой строке имеются три ненулевых элемента соответственно в нулевом, четвертом и восьмом столбцах. Это означает, что из X5 можно перейти или в X0 или в X4 или в X8. Возвращаться в X0 нет смысла, лучше всего идти в сток X8. Этот переход изображен стрелкой в пятой строке с началом в пятом столбце и концом — в восьмом.

249

cij.

Таким образом, по таблице мы нашли путь, ведущий по ненасыщенным дугам из источника в сток:

X 0 X 5 X 6 .

Теперь по таблице надо указать пропускную способность найденного пути и изменить пропускные способности дуг этого пути и симметричных им дуг. Для этого отмечаем знаком «минус» числа в тех клетках, где находятся концы дуг, а числа в клетках, симметричных указанным относительно главной диагонали, отмечаем знаком «плюс».

Пропускная способность найденного пути равна, очевидно, наименьшему среди чисел, отмеченных знаком «минус»:

θ = min{cij}.

В данном случае θ1 = 2 .

Чтобы вычислить новые пропускные способности дуг найденного пути и симметричных им дуг, достаточно, согласно (8.3.5) и (8.3.6), из всех чисел, отмеченных знаком «минус», вычесть наименьшую пропускную способность θ1 , а ко всем числам, отмеченным знаком «плюс», прибавить θ1 . Получаем табл. 8.3.2 с измененными пропускными способностями дуг сети. Она соответствует рис. 8.3.1, а. По таблице находим путь

X 0 X 5 X 4 X 6 X 8 ,

отмечаем знаком «минус» пропускные способности дуг этого пути (они записаны в клетках на концах стрелок), знаком «плюс» — пропускные способности симметричных дуг. Находим θ2 как наименьшее среди

Прибавляя θ2 к cij+ и вычитая из cij, переходим к табл. 8.3.3 и т. д.

Выполнив еще четыре шага, придем к табл. 8.3.4. Из этой таблицы видно, что не существует ни одного пути из источника в сток. Действительно, из X0 можно перейти в X5. Далее, так как в пятой строке только два ненулевых элемента c50 и c54, можно перейти либо в X0 (вернуться, что бессмысленно), либо в X4. Но в четвертой строке только один элемент c45, отличный от нуля. Поэтому из вершины X4 можно перейти только в X5, т. е. опять появляется контур. Никаких других возможностей нет. Следовательно, увеличить поток нельзя.

Для определения полученного максимального потока вычитаем из элементов первой таблицы (см. табл. 8.3.1) соответствующие элементы последней (см. табл. 8.3.4). Записывая только положительные из найденных разностей, получаем табл. 8.3.5, указывающую максимальный поток в заданной сети с величиной w* = z58 + z68 + z78 = 2 + 5 + 2 = 9 .

250