增廣路徑求解最大流

2022-08-24 05:03:17 字數 893 閱讀 4567

關於什麼是最大流。我說不清楚,而且也沒有別人的比喻生動。

【主要是我懶,不想畫圖】

演算法的核心在於:找到增廣路徑,修改它,繼續找,直到沒有。

while ( findaugmentpath() ) // 判斷是否有增廣路

maxflow = maxflow + delta // 最大流增加

modifygraph() // 對增廣路進行修改

end while

最近智商有點不夠用。想了很久才想通findaugmentpath()函式。

利用的是bfs。

1

inti,j,u,v;

2int flag=0;3

for(i=0;i)4//

初始化10

int tail=0;//

tail標記此時bfs到哪個地方了

11 queue[tail]=0

;12 capacity[0]=inf;

13 visited[0]=1

;14 i=0;15

while(i<=tail)

1624

25for(v=0;v//

bfs26

3637

}38 i++;

39 }

view code

我在想如果只是需要找到一條增廣路徑,然後修改它,dfs演算法也可以。【於是給自己挖了乙個坑】

對增廣路徑的修改,就是找到了某乙個路徑的最大流,然後經過的路徑全部減去這個最大流,意思是下次這裡不通了。

1

void

modifygraph()2

13 }

view code

網路最大流求解 增廣路演算法

增廣路演算法 根據增廣路地理,為了得到最大流,可以從任何乙個可行流開始,沿著增廣路對網路流進行增廣,直到網路中不存在增廣路為止,這樣的演算法稱為增廣路演算法。增廣路演算法流程如下。1 取乙個可行流f作為初始流 如果沒有給定可行流,則取零流作為初始流 2 尋找關於f的增廣路p,如果找到,則沿著這條增廣...

最大流的增廣路演算法

模板題目鏈結 洛谷p3376 模板來自演算法競賽入門經典 第2版 劉汝佳 include using namespace std define inf 0x3f3f3f3f typedef long long ll const int maxn 100010 struct edge 記錄這條邊的資訊...

最大流 增廣路演算法 最小費用最大流

cap flow代表連通,cap flow代表不連通 最大流 不停的尋找s連通至t的路徑,更新.直到找不到路徑 注 p u 1和p u 互為方向邊 include include include include include using namespace std const int maxn 1...