# Edmonds Karp 算法

752人阅读 评论(0)

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.\$
0
0

* 以上用户言论只代表其个人观点，不代表CSDN网站的观点或立场
个人资料
• 访问：47898次
• 积分：880
• 等级：
• 排名：千里之外
• 原创：36篇
• 转载：9篇
• 译文：1篇
• 评论：3条
文章分类
阅读排行
评论排行
最新评论