Изменения

Перейти к: навигация, поиск

Циркуляция потока

783 байта добавлено, 05:54, 17 декабря 2011
Нет описания правки
Запустим в новой сети один из алгоритмов поиска максимального потока. Если он не смог полностью насытить все ребра их истока, то и никакой другой по величине поток этого сделать не сможет, значит, циркуляции нет. Для получения величин потоков по каждому ребру изначальной сети в случае, если циркуляция есть, достаточно просто прибавить к потокам в ребрах $e'_i$ величины $l_i$.
</wikitex>
 
==Псевдокод==
G // пустой граф, вершины 0 и n + 1 - исток и сток
n, m; // вершин, ребер в исходном графе
edge // ребро с полями (from, to, min_cap, cap)
Для i = 1 to m делай
считать ребро edge
добавить в граф G ребро (0, edge.to, 0, edge.min_cap)
добавить в граф G ребро (edge.from, edge.to, 0, edge.cap - edge.min_cap)
добавить в граф G ребро (edge.from, n + 1, 0, edge.min_cap)
max_flow = наибольший поток в графе G
Для всех ребер, инцидентных истоку, делай
если для текущего ребра flow < cap
циркуляции НЕТ
==Источники==
* [http://e-maxx.ru/algo/flow_with_limits e-maxx]
* [http://dl.dropbox.com/u/39566886/Graph-Theory-Algorithms-M-Ashraf-Iqbal.pdf M. Ashraf Iqbal {{---}}'''Graph Theory and Algorithms''']
355
правок

Навигация