# Edmonds Karp 算法

algorithm EdmondsKarp
input:
C[1..n, 1..n] (Capacity matrix)
E[1..n, 1..?] (Neighbour lists)
s             (Source)
t             (Sink)
output:
f             (Value of maximum flow)
F             (A matrix giving a legal flow with the maximum value)
f := 0 (Initial flow is zero)
F := array(1..n, 1..n) (Residual capacity from u to v is C[u,v] - F[u,v])
forever
m, P := BreadthFirstSearch(C, E, s, t, F)
if m = 0
break
f := f + m
(Backtrack search, and write flow)
v := t
while v ≠ s
u := P[v]
F[u,v] := F[u,v] + m
F[v,u] := F[v,u] - m
v := u
return (f, F)

input:
C, E, s, t, F
output:
M[t]          (Capacity of path found)
P             (Parent table)
P := array(1..n)
for u in 1..n
P[u] := -1
P[s] := -2 (make sure source is not rediscovered)
M := array(1..n) (Capacity of found path to node)
M[s] := ∞
Q := queue()
Q.push(s)
while Q.size() > 0
u := Q.pop()
for v in E[u]
(If there is available capacity, and v is not seen before in search)
if C[u,v] - F[u,v] > 0 and P[v] = -1
P[v] := u
M[v] := min(M[u], C[u,v] - F[u,v])
if v ≠ t
Q.push(v)
else
return M[t], P
return 0, P


## Example

Given a network of seven nodes, source A, sink G, and capacities as shown below:

In the pairs $f/c$ written on the edges, $f$ is the current flow, and $c$ is the capacity. The residual capacity from $u$ to $v$ is $c_f(u,v)=c(u,v)-f(u,v)$, the total capacity, minus the flow that is already used. If the net flow from $u$ to $v$ is negative, it contributesto the residual capacity.

Capacity Path
Resulting network
$\min(c_f(A,D),c_f(D,E),c_f(E,G)) =$

$\min(3-0,2-0,1-0) =$
$\min(3,2,1) = 1$

$A,D,E,G$
$\min(c_f(A,D),c_f(D,F),c_f(F,G)) =$

$\min(3-1,6-0,9-0) =$
$\min(2,6,9) = 2$

$A,D,F,G$
$\min(c_f(A,B),c_f(B,C),c_f(C,D),c_f(D,F),c_f(F,G)) =$

$\min(3-0,4-0,1-0,6-2,9-2) =$
$\min(3,4,1,4,7) = 1$

$A,B,C,D,F,G$
$\min(c_f(A,B),c_f(B,C),c_f(C,E),c_f(E,D),c_f(D,F),c_f(F,G)) =$

$\min(3-1,4-1,2-0,0-(-1),6-3,9-3) =$
$\min(2,3,2,1,3,6) = 1$

$A,B,C,E,D,F,G$

Notice how the length of the augmenting path found by the algorithm (in red) never decreases. The paths found are the shortest possible. The flow found is equal to the capacity across the minimum cut in the graph separating the source and the sink. There is only one minimal cut in this graph, partitioning the nodes into the sets $\{A,B,C,E\}$ and $\{D,F,G\}$, with the capacity

$c(A,D)+c(C,D)+c(E,G)=3+1+1=5.\$
• 本文已收录于以下专栏：

## Edmonds_Karp算法模版

• 2010年03月25日 13:59
• 12KB
• 下载

## 最大流-Edmonds-Karp算法

#include #include using namespace std; const int maxn=205; const int inf=0x7fffffff; int r[maxn][max...

## POJ 1273 Drainage Ditches (网络流最大流基础 Edmonds_Karp算法)

POJ 1273 Drainage Ditches (网络流基础 Edmonds_Karp算法)

## 最大流Edmonds-Karp算法实现文件C++

// graph.cpp -- implement file. // 2011-09-25-14.31 -- 2011-09-25-15.58 // 2011-09-25-18.16 -- 201...

## POJ 1459 Power Network (网络流最大流基础 多源点多汇点 Edmonds_Karp算法)

POJ 1459 Power Network (网络流最大流基础 多源点多汇点 Edmonds_Karp算法)

## 网络流 最大流 Edmonds-Karp算法

Edmonds-Karp算法，复杂度O（VE^2）。思想就是找增广路，不断增加流量。在残量（每条边上流量和容量的差）图上找一条每个边权值都为正的路（可以通过BFS，比DFS效率高），这些边权值里的最小...
• corncsd
• 2014年01月21日 17:20
• 587

## hdu 3549 Flow Problem（最大流模版题 Edmonds-Karp算法）

Flow Problem Time Limit: 5000/5000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others) T...
• WEYuLi
• 2013年09月29日 16:30
• 624

## POJ 1273 最大流入门题 Edmonds_Karp算法

Edmonds_Karp算法步骤： 循环{ 初始化 寻找增广路 没有则退出 根据增广路，更新flow } #include #include #include #inc...

举报原因： 您举报文章：Edmonds Karp 算法 色情 政治 抄袭 广告 招聘 骂人 其他 (最多只允许输入30个字)