最大流之Ford Fulkerson演算法

2021-06-27 22:55:23 字數 2042 閱讀 9481

參考:《演算法導論》第26章最大流

網路流性質:

1)除了源節點和終結點外,物料在其他節點上只是流過,並不積累或聚集,即物料進入乙個節點的速率必須與其離開該節點的速率相等。這個性質稱為流量守恆。

2)網路流g=(v,e)是乙個有向圖,圖中每條邊(u,v)有乙個非負的容量值c(u,v)>=0.而且,如果邊集合e包含一條邊(u,v),則圖中不存在反向的邊(v,u)。

當存在多個源節點和匯節點時,最大流問題並不比普通的最大流更難,可以規約為乙個普通的最大流問題,轉換的方法是加入乙個超級源節點s,並對於i=1,2,…m,加入有向邊(s,si)和容量c(s,si)=無窮。我們同時建立乙個新的超級匯節點,對於i=1,2,…n,加入有向邊(ti,t),其容量為c(ti,t)=無窮。

ford-fulkerson方法:

主要思想:殘存網路、增廣路徑和切割。最大流最小切割定理等。

殘存網路:如果一條邊(u,v)在e中,那麼殘存網路中的cf(u,v)=c(u,v)-f(u,v),且cf(v,u)=f(u,v),其他的情況,cf(u,v)=0,這是用來構成殘存網路的主要的公式,物理意義:如果(u,v)在e中,則cf(u,v)表示還能從u到v增大多少流量,cf(v,u)表示可以從u到v減少多少流量。

增廣路徑:用p表示,是殘存網路中一條從源節點s到匯節點t 的簡單路徑。

最大流最小切割定理:設f為網路g=(v,e)中的乙個流,該流網路的源節點為s,匯節點為t,則下面的條件是等價的:

1)f是g的乙個最大流

2)殘存網路gf不包括任何增廣路徑

3)|f|=c(s,t),其中(s,t)是流網路g的某個切割。

複雜度:o(e|f*|),f*表示轉換後的乙個最大流。

如果採用廣度優先遍歷來尋找增廣路徑,則執行時間為o(ve^2)

**:

#ifndef __graphmatrix__

#define __graphmatrix__

#include#include#includeusing namespace std;

struct vertex

bool operator<(const vertex &a)const

int insertvertex(vertex & v);

void insertedge(vertex from,vertex to,edge e,bool doubleside=true);

void fordfulkerson(vertex s,vertex t);

};#endif

#include"graphmatrix.h"

#includeusing namespace std;

int graphmatrix::insertvertex(vertex & v)

void graphmatrix::fordfulkerson(vertex s,vertex t)

curr=end;

p=v[curr].parent;

while(p!=-1)

else

curr=p;

p=v[curr].parent;

} }}

測試**:

#include#include"graphmatrix.h"

#include#includeusing namespace std;

#define debug

int main()

{#ifdef debug

freopen("input.txt","r",stdin);

#endif

graphmatrix gm;

char from,to;

int e;

//測試邊和頂點的插入

cout<<"輸入邊"<>from>>to>>e)

{ cout<<"輸入邊"<

a b 16

a c 13

c b 4

b d 12

d c 9

c e 14

e d 7

d f 20

e f 4

最大流之Dinic演算法

之前簡單介紹了最大流之ford fulkerson演算法,此演算法時間複雜度為o f e 大多數情況下,這個演算法已經足夠高效了,但當頂點數或最大流流量非常大時,這個演算法就顯得不夠快了。下面簡單介紹易實現的dinic演算法。ford fulkerson演算法通過深度優先搜尋尋找增廣路,並沿著它增廣...

最大流之sap演算法

若有向圖g v e 滿足下列條件 1 有且僅有乙個頂點s,它的入度為 0 這個頂點稱為源點。2 有且僅有乙個頂點t,它的出度為 0 這個頂點稱為匯點。3 每一條弧都有乙個非負數,叫做這條邊的容量,邊 vi vj 的容量用 cij 來表示。則此有向圖稱為網路流圖,記為 g v e c 對於網路流圖g中...

模板 網路最大流 最大流

給出乙個網路圖,以及其源點和匯點,求出其網路最大流。in put role presentation inp utin put4 5 4 3 4 2 30 4 3 20 2 3 20 2 1 30 1 3 40ou tput role presentation out puto utpu t50最大...