網(wǎng)絡(luò)流——Ford-Fulkerson 算法

最大流算法

Ford-Fulkerson 算法是用于計(jì)算容量網(wǎng)絡(luò) < V,E,c,s,t> 的最大流的算法霜定。該算法主要基于如下定理:

定理: 可行流 f 是最大流當(dāng)且僅當(dāng)不存在關(guān)于 f 的增廣鏈界弧。

Ford-Fulkerson 將不斷尋找圖中存在的增廣鏈沸停,并調(diào)整該鏈所包含邊的流量 f(i,j)愕乎,使得網(wǎng)絡(luò)的流量 v(f) 增加荧止。當(dāng)圖中不再存在關(guān)于 f 的增廣鏈時(shí)垮抗,f 即為最大流陆盘。

算法(Ford-Fulkerson)

  • 輸入:c\in\mathbb R^{n\times n}, 1\leqslant s,t\leqslant n
    其中 c(i,j) 為有向邊 i\rightarrow j 的容量,s,t 是容量網(wǎng)絡(luò)的起點(diǎn)和終點(diǎn)恤磷。
  • 輸出:f\in\mathbb R^{n\times n}
    其中 f 為最大流面哼。

\mathrm{while(1)}

a. 尋找網(wǎng)絡(luò)的增廣鏈
b. 調(diào)整增廣鏈上的流量

下面的問題是如何從給定的 c,f 中尋找增廣鏈

尋找增廣鏈

尋找增廣鏈的過程類似于在圖中構(gòu)造子樹扫步。于是魔策,集合 T 用來存儲(chǔ)正在檢查的頂點(diǎn),R 用來存儲(chǔ)還未被檢查過的頂點(diǎn):

  • T=\{s\},~R=V-\{s\}河胎;
  • T 中取出一個(gè)頂點(diǎn) i闯袒,然后將其在 R 中的鄰接點(diǎn)加入 T,并記錄相應(yīng)的路徑和流量游岳;
  • 如果 i 的鄰接點(diǎn)集中包含終點(diǎn) t政敢,說明已經(jīng)找到增廣鏈,退出循環(huán)胚迫;
  • T 中刪除 i喷户,從 R 中刪除 i 及其鄰接點(diǎn);
  • 當(dāng) T\neq\phi 時(shí)访锻,回到第二步褪尝;
  • 如果結(jié)束循環(huán)時(shí) T=\phi,說明沒有找到增廣鏈朗若,f 就是最大流恼五,結(jié)束程序。

調(diào)整增廣鏈上的流量

  • 將增廣鏈上的 f(i,j) 全部加上 \delta哭懈。

代碼實(shí)現(xiàn)(MATBALB)

function f = FordFulkerman( c,s,t )
n=length(c);
f=zeros(n); % 初始流
while(1) % 開始尋找增長(zhǎng)鏈
    T=s;R=setdiff(1:n,s);
    l=zeros(1,n);delta=zeros(1,n);delta(s)=inf;
    while(~isempty(T))
        i=T(1); % 選取元素
        T(T==i)=[];R(R==i)=[]; % 刪除元素
        J=R(f(i,R)<c(i,R)); % i->j
        T=union(T,J);
        l(J)=i;delta(J)=min(delta(i),c(i,J)-f(i,J)); % 更新l,delta
        if(find(J==t,1)) % 鄰接集中包含t
            T=-1;break;
        end
        R=setdiff(R,J);
        J=R(f(R,i)>0); % j->i 
        T=union(T,J);
        l(J)=-i;delta(J)=min(delta(i),f(J,i)); % 更新l,delta
        if(find(J==t,1)) % 鄰接集中包含t
            T=-1;break;
        end
        R=setdiff(R,J);
    end
    if(T==-1) % 存在增廣鏈
        delta=delta(t); % 用于調(diào)整的值
        j=t;i=l(j); % 更新f
        while(i)
            if(i>0) % i->j
                f(i,j)=f(i,j)+delta;
            else % j->i
                i=-i;
                f(j,i)=f(j,i)+delta;
            end
            j=i;i=l(j);
        end
    else % 程序結(jié)束
        return;
    end
end
end

使用以下指令即可獲得最大流 f 的流量:

v=sum(f(s,:))-sum(f(:,s))
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末灾馒,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子遣总,更是在濱河造成了極大的恐慌睬罗,老刑警劉巖轨功,帶你破解...
    沈念sama閱讀 211,348評(píng)論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異容达,居然都是意外死亡古涧,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,122評(píng)論 2 385
  • 文/潘曉璐 我一進(jìn)店門花盐,熙熙樓的掌柜王于貴愁眉苦臉地迎上來羡滑,“玉大人,你說我怎么就攤上這事算芯∑饣瑁” “怎么了?”我有些...
    開封第一講書人閱讀 156,936評(píng)論 0 347
  • 文/不壞的土叔 我叫張陵熙揍,是天一觀的道長(zhǎng)职祷。 經(jīng)常有香客問我,道長(zhǎng)届囚,這世上最難降的妖魔是什么有梆? 我笑而不...
    開封第一講書人閱讀 56,427評(píng)論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮意系,結(jié)果婚禮上泥耀,老公的妹妹穿的比我還像新娘。我一直安慰自己蛔添,他們只是感情好爆袍,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,467評(píng)論 6 385
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著作郭,像睡著了一般。 火紅的嫁衣襯著肌膚如雪弦疮。 梳的紋絲不亂的頭發(fā)上夹攒,一...
    開封第一講書人閱讀 49,785評(píng)論 1 290
  • 那天,我揣著相機(jī)與錄音胁塞,去河邊找鬼咏尝。 笑死,一個(gè)胖子當(dāng)著我的面吹牛啸罢,可吹牛的內(nèi)容都是我干的编检。 我是一名探鬼主播,決...
    沈念sama閱讀 38,931評(píng)論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼扰才,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼允懂!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起衩匣,我...
    開封第一講書人閱讀 37,696評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤蕾总,失蹤者是張志新(化名)和其女友劉穎粥航,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體生百,經(jīng)...
    沈念sama閱讀 44,141評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡递雀,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,483評(píng)論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了蚀浆。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片缀程。...
    茶點(diǎn)故事閱讀 38,625評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖市俊,靈堂內(nèi)的尸體忽然破棺而出杨凑,到底是詐尸還是另有隱情,我是刑警寧澤秕衙,帶...
    沈念sama閱讀 34,291評(píng)論 4 329
  • 正文 年R本政府宣布蠢甲,位于F島的核電站,受9級(jí)特大地震影響据忘,放射性物質(zhì)發(fā)生泄漏鹦牛。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,892評(píng)論 3 312
  • 文/蒙蒙 一勇吊、第九天 我趴在偏房一處隱蔽的房頂上張望曼追。 院中可真熱鬧,春花似錦汉规、人聲如沸礼殊。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,741評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽晶伦。三九已至,卻和暖如春啄枕,著一層夾襖步出監(jiān)牢的瞬間婚陪,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評(píng)論 1 265
  • 我被黑心中介騙來泰國(guó)打工频祝, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留泌参,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,324評(píng)論 2 360
  • 正文 我出身青樓常空,卻偏偏與公主長(zhǎng)得像沽一,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子漓糙,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,492評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容

  • 目錄 1.流網(wǎng)絡(luò)及最大流問題1.1 流網(wǎng)絡(luò)1.2 最大流問題1.3 最大流問題的三種解法對(duì)比 2.Ford-Ful...
    王偵閱讀 4,597評(píng)論 0 3
  • 最大流&&最小費(fèi)用最大流&&最大二分匹配 中文是2017年8月的筆記铣缠,英文是2018.11月的筆記 英文筆記來自于...
    廖少少閱讀 34,647評(píng)論 6 20
  • 歸去來兮。 1.1 說明 本篇為《挑戰(zhàn)程序設(shè)計(jì)競(jìng)賽(第2版)》[http://www.ituring.com.cn...
    尤汐Yogy閱讀 14,296評(píng)論 0 160
  • 轉(zhuǎn)載:網(wǎng)絡(luò)流基礎(chǔ)篇——Edmond-Karp算法網(wǎng)絡(luò)流的相關(guān)定義: 源點(diǎn):有n個(gè)點(diǎn),有m條有向邊攘残,有一個(gè)點(diǎn)很特殊拙友,...
    Gitfan閱讀 3,475評(píng)論 0 8
  • 一切要從一張小費(fèi)單說起,不過還有些前話歼郭。 2016年四月在吳哥窟遗契,一中國(guó)老年旅行團(tuán)在崩密列寺最高處休息...
    上的影閱讀 193評(píng)論 0 0