網路流Edmond Karp演算法

2021-06-27 02:05:18 字數 1255 閱讀 2754

前陣子都在忙php的事,沒有時間去更新部落格,今天下午終於狠下心來學網路流,在這裡講一下網路流edmond-karp演算法的基礎內容。

其思想是不斷通過bfs尋找一條增廣路,直到殘留網路中不再存在增廣路為止。

對於每次找到一條增廣路,我們需要知道兩條資訊。

1、該增廣路的最大流量(可以定義乙個變數來求得)。

2、該增廣路的路徑(可以定義乙個陣列來存每個節點的前驅)。

對於每次增廣,從 x 到 y 的容量減少增廣流量的同時從 y 到 x 的容量也要增加增廣的流量。

找了這麼一題來練手:poj1273 **如下:

#include 

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

using namespace std;

#define pi 3.1415926535897932385

#define ll64 __int64

#define ll long long

#define n 210

#define m 2147483647

int n, m;//m個點,n條邊

int arr[n][n];//記錄殘留網路的容量

int pre[n];//記錄前驅

int flow[n];//記錄當前最大流量

int bfs(int source, int sink)

memset(pre, -1, sizeof(pre));

pre[source] = 0;

flow[source] = m;

q.push(source);

while (!q.empty())

}if (pre[sink] == -1) return -1;//殘留圖中不再存在增廣路徑

return flow[sink];

}int maxflow(int source, int sink)

flow_sum += inc;

}return flow_sum;

}int main()

printf("%d\n", maxflow(1, m));

}return 0;

}

網路流 Edmond Karp演算法 Dinic演算法

網路流基礎篇 edmond karp演算法 by奈米黑客 通常可以把這些邊想象成道路,流量就是這條道路的車流量,容量就是道路可承受的最大的車流量。很顯然的,流量 容量。而對於每個不是源點和匯點的點來說,可以模擬的想象成沒有儲存功能的貨物的中轉站,所有 進入 他們的流量和等於所有從他本身 出去 的流量...

網路流 最大流(Edmond Karp演算法)

一 含義 從源點到經過的所有路徑的最終到達匯點的所有流量和 例如 在這個圖中求源點1,到匯點4的最大流。答案為50,其中1 2 4為20 1 4為20 1 2 3 4為10 總和為20 20 10 50。二 ek演算法的核心 反覆尋找源點s到匯點t之間的增廣路徑,若有,找出增廣路徑上每一段 容量 流...

最大流(一) Edmond Karp演算法

ek演算法為最短增廣路演算法,具體步驟 1 初始化網路中所有邊的容量 c u v 為該邊的容量,同時反向邊 c v u 為0,初始化最大流為0。2 在殘留網路中找一條從源s到匯t的增廣路p。如果能找到,轉步驟 3 如果不能找到,則轉步驟 5 3 在增廣路p中找到所謂的 瓶頸 邊,即路徑中的最小邊,記...