27
правок
Изменения
Нет описания правки
==Псевдокод==
Конструктор ребра принимает следующие аргументы:* <tex>\mathtt{from}</tex> {{---}} вершина начала ребра* <tex>\mathtt{to}</tex> {{---}} вершина конца ребра* <tex>\mathtt{cap}</tex> {{---}} минимальная пропускная способность ребра* <tex>\mathtt{mincap}</tex> {{---}} максимальная пропускная способность ребра '''function''' circulation(<tex>V,E</tex>): <tex>G'=\varnothing{V,s,t}</tex> <font color=green>// пустой создаём новый граф, вершины с исходными вершинами и добавлением s и t {{-- -}} исток и сток</font> '''for''' <tex>e : e\in E</tex> <font color=green>// конструктор ребра принимает 4 параметра: две инцидентные ребру вершины, величину потока через это ребро и пропускную способность</font> <tex>tg</tex> = Edge(<tex>s</tex>, <tex>e</tex>.to, <tex>0</tex>, <tex>e</tex>.min_capmincap) <tex>gh</tex> = Edge(<tex>e</tex>.from, <tex>e</tex>.to, <tex>0</tex>, <tex>e</tex>.cap - <tex>e</tex>.min_capmincap) <tex>hk</tex> = Edge(<tex>e</tex>.from, <tex>t</tex>, <tex>0</tex>, <tex>e</tex>.min_capminсap) <tex>G ' = G ' \cup {t,g,h,k}</tex> maxFlow = getMaxFlow(<tex>G'</tex>) <font color=green>// наибольший поток в графе G'</font> '''for''' <tex>e : e\in E'</tex> '''and''' <tex>e</tex>.from <tex>=s</tex> '''if''' <tex>f</tex>(<tex>e</tex>)<tex> < e</tex>.cap <font color=green>// если для текущего ребра flow < cap</font>
'''return''' false
'''return''' true