1. 程式人生 > >最大流和費用流問題中使用反向弧的原因

最大流和費用流問題中使用反向弧的原因

剛開始看學最大流,根本沒注意反向弧,後來做到最小費用最大流問題時候發現需要把反向弧的容量設定為0,費用設為原費用的相反數,這才發現反向弧還有一些東西沒有注意到,然後又回過頭專門學習了下最大流問題反向弧那塊。下面是從網上找到兩個例子,具體一下。

eg1:

6 7
1 2 10
2 4 10
4 6 10
1 3 10
3 5 10
5 6 10
2 5 10


這樣你會先拓展出 1 - 2 - 5 - 6這條增廣路,然後如果沒有反向弧你的增廣過程就結束了,你求出的最大流就是10。
但是實際上,可以有1 - 2 - 4 - 6 & 1 - 3 - 5 - 6兩條增廣路,最大流是20.

eg2:


這樣不用反向弧 1 2 4 6 然後停止


用的話
1 2 4 6
1 3 4 2 5 6
然後停止

這樣求得的兩個路徑是:

1 2 5 6

1 3 4 6


意義:利用當前的流到a的流量,來退掉一些以往流到a的流量,是這些被退掉的流量能夠通過別的路徑到達匯點。

經過上邊的學習,相信也很容易明白費用流問題中反向弧初始賦值(容量設定為0,費用設為原費用的相反數)的原因了。