2017-09-10 50 views
1

我試圖找到下面網絡的最小割 enter image description here查找流網絡的最小割

我使用下面的算法:

  1. 潤福特Fulkerson算法,並考慮最終殘差圖。

  2. 找到殘差圖中可以從源訪問的一組頂點。

  3. 從可到達頂點到不可到達頂點的所有邊都是最小切割邊。打印所有這些邊緣。

在第一步驟中,我的算法找到3條路徑:

- s->b->h->t **value: 1** 
- s->d->e->t **value: 1** 
- s->c->h->i->m->d->g->t **value: 0.5** 

所以最大流量(並且因此最小割)等於2.5。

然而,當我稍後嘗試消除來自網絡I結束了這樣的上述路徑: enter image description here

可到達頂點是S,C和H,其形成等於3.5的切口。

我錯過了什麼?爲什麼我不能像通常那樣遍歷圖表來得到最小值?

+0

*「可到達的頂點是s,c和h,它們形成等於3.5的切割。「* - 這個剪輯的權重是不是零?可以詳細說明3.5從哪裏來? – Anton

+0

@ user3290797我在第二張圖片上標記了BFS遍歷的結果 - 這個剪輯在真實網絡中的值爲3.5。 – Simon

回答

1

每次增加殘差圖中邊的容量時,都需要增加相同邊的容量。

實施例圖:

enter image description here

這裏是不向後邊緣剩餘圖和從S的該組頂點的可達(其不構成最小割):

enter image description here

以及最小切割的正確殘差圖:

enter image description here

+0

謝謝,這是我失蹤了! – Simon

+0

只是一件事 - 在你的例子中,邊S-> A的值應該是9,並且A-> S應該是1. – Simon

+0

@Simon謝謝,修正。 – Anton

0

我假定,您的剩餘圖的定義是,你把邊緣A-> B在剩餘圖,如果:

一個)有流和容量之間的一些不同的方向A-> B(又名向前邊沿) b)方向B-> A(又名後沿)有一些流動

在這個定義中你的第2步是錯誤的。

要找到最小剪裁,您只能從開頭走過前緣。現在,您可以將從起點到達的頂點表示爲集合R,並將其作爲集合R'休息。 現在切割由R和R'之間的邊緣完成。 切割的大小是R和R'之間的流動。

+0

I don我不明白你的意思,我給出的殘差圖有什麼問題嗎?我通過刪除我列出的路徑來創建殘差圖,然後以bfs的方式遍歷殘差圖,你能詳細說明一下嗎? – Simon