1. 程式人生 > >網絡流之最大流算法

網絡流之最大流算法

要求 -c style 相加 宋體 所有 概念 -s 流量

最大流

網絡流的定義:

在一個網絡(有流量)中有兩個特殊的點,一個是網絡的源點(s),流量只出不進,一個是網絡的匯點(t),流量只進不出。

最大流:就是求s-->t的最大流量

假設 u,v 兩個點,連接這兩個點的邊為e(u,v);

對於每一條邊都有一個實際流量f(u,v),還有一個容量c(u,v),就是這條邊上可以通過的最大流量。

當一條邊的容量c(u,v)=0,證明這條邊是不存在的,

作為一個合格的網絡流,必須滿足三個條件:

1>每條邊的實際流量小於等於容量 f(u,v)<=c(u,v);

2>f(u,v)=-f(v,u);

3>對於不是源點和匯點的點,流入的流量等於流出的流量

如何來求一個網絡的最大流:

如圖是一個網路流,很明顯看出答案是4。

我們要求s-t的流量,我們可以選擇這樣來求解,我們先從s點出發,找到一條s-t的路徑,記錄這條路徑上那個最小的實際流量,

算法就是我們要找到很多條這樣的路徑,但這些路徑都應該是不同的,所有我們只需要把這多條路徑的的最小流量相加 得到就是最大流、

這個尋找s-t的路徑也叫做增廣路算法

其實這裏困難的就是如何保證這些路徑是不會相同的 這是涉及到一個概念 就是殘留網絡

殘留網絡就是每次利用增廣路算法找到這條路徑的最小實際流量 minn,我們在原網絡中把這條邊的容量都減去minn,所以必定這條路徑中一定會有流量為0。

所有下次增廣的話,就一定不會走原路 因為你的流量有0,走是沒有意義的

網絡流之最大流算法