一:流網路
流網路g=(v,e)是乙個有向圖,圖中每條邊(u,v)有乙個非負的容量值c(
u,v)
≥0。而且如果邊集合e包含一條邊(u,v),則圖中不存在反方向的邊(v,u)。如果邊(u,v)不屬於e,則定義c(u,v)=0,並且圖中不允許自迴圈。在流網路的所有結點中,我們特別分別出兩個特殊結點,源結點s和匯點t,為方便起見,假定每個結點都在從源點到匯點的某條路徑上。
我們現在可以給出流的形式化定義。假設g=(v,e)為乙個流網路,其容量函式為c。假設s為源結點,t為匯點。圖中任意邊(u,v)的流是乙個實值f(u,v),其滿足下面兩個性質
1:容量限制:對於所有的結點u和v,要求0≤
f(u,
v)≤c
(u,v
) 。
2:流量守恆:對於屬於集合v-的所有結點u來說,要求∑v
∈vf(
v,u)
=∑v∈
vf(u
,v) 。當(u
,v)∉
e 時,從結點u到結點v之間沒有流,因此f(u,v)=0;
我們稱非負數值f(u,v)為從結點u到結點v的流。乙個流f的值|f|定義如下:|f
|=∑v
∈vf(
s,v)
−∑v∈
vf(v
,s)
也就是說,流f的值是從源結點流出的總流量減去流入源結點的總流量。在最大流問題中,給定乙個流網路g,乙個源結點s和乙個匯點t,我們希望找到值最大的乙個流。
二:ford-fulkerson方法
ford-fulkerson方法迴圈增加流的值。在開始的時候,對於所有的結點u,
v∈v , f(u,v)=0,給出的初始流值為0。在每一次迭代中,我們將圖g的流值進行增加,方法就是在乙個關聯的「殘存網路」gf
中尋找一條「增廣路徑」。一旦知道殘存網路中一條增廣路徑的邊,就可以很容易辨別出g中的一些具體的邊,我們可以對這些邊上的流量進行修改,從而增加流的值。雖然ford-fulkerson方法的每次迭代都增加流的值,但是對於圖g的一條特定邊來說,其流量可能增加,也可能減少;對某些邊的流進行縮減可能是必要的,以便讓演算法可以將更多的流從源結點傳送到匯點。重複對流進行這一過程,直到殘存網路中不再存在增廣路徑為止,這時候會獲得乙個最大流。
在殘存網路中尋找增廣路徑的方法有很多種,下面的**是用廣度優先搜尋尋找增廣路徑。**如下:
//求從源點source到匯點sink的最大流量
double ford_fulkerson_bfs(const
vector
>& graph,const
vector
>& capacity,int source,int sink)
if(c[vertex][last_vertex]!=0)
else
vertex=last_vertex;
}pred=bfs(residual_network,source);
}print_edge_flow_value(graph,c); //輸出從源點到匯點的最大流值在圖中每條邊的分配;
return max_flow;
}//上述**中的residual_capacity(),add_edge(),remove_edge(),print_edge_flow_value()**如下:
//殘餘網路的一條增廣路徑能夠為每條邊增加的流量的最大值,也就是增廣路徑所有邊中容量的最小值;
double residual_capacity(const
vector
& pred,const
vector
>& capacity,int sink)
void remove_edge(vector
>& graph,int u,int v)
void add_edge(vector
>& graph,int u,int v)
void print_edge_flow_value(const
vector
>& graph,const
vector
>& residual_network_capacity)
}
模板 網路最大流 最大流
給出乙個網路圖,以及其源點和匯點,求出其網路最大流。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最大...
模板 網路最大流 最大流
給出乙個網路圖,以及其源點和匯點,求出其網路最大流。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最大...
022 第26章 享元模式
簡述 享元模式 運用共享技術有效地支援大量細粒度的物件。享元模式包括 享元工廠類 享元介面類 具體享元類 享元工廠類 用來建立並管理享元介面類物件,它主要使用來確保合理地共享享元介面類,當使用者請求乙個享元介面類物件時,享元工廠類物件提供乙個已建立的例項或者建立乙個 不存在的話 享元介面類 所有具體...