最大流算法ppt课件

合集下载

网络流——求网络最大流

网络流——求网络最大流

4 1 4 8
4 2 2 6
7
9
(1,4) V2 (0,+∞) V1
(2,4) V4 (4,4) V6
(1,8)
V3
V5 (2,1)
4 1 4 8
4 2 2 6
7
9
(-4,2) V2 (0,+∞) V1 4 4
(3,2) V4 4
(4,2) V6
(1,8)
V3
V5 (3,2)
4 1 4 8
4 2 2 6
7
9
(5,2) V2 (0,+∞) V1 2 4 4 V4 6
(5,2) V6
2
(1,6)
V3
V5 (3,2)
4 1 4 8
4 2 2 6
7
9
V2 (0,+∞) V1 4 4
4
V4
6 V6 2
2 2
(1,4)
V3
V5
存储结构
const maxn=100; type nodetype=record{可改进路顶点类型 可改进路顶点类型} 可改进路顶点类型 l,p:integer;{标号、检查标志 标号、 标号 检查标志} end; arctype=record{网顶点类型 网顶点类型} 网顶点类型 c,f:integer;{容量、流量 容量、 容量 流量} end; gtype=array[0..maxn,0..maxn] of arctype; ltype=array[0..maxn] of nodetype; var lt:ltype; g:gtype; n,s,t:integer;{顶点数、源点、汇点 顶点数、 顶点数 源点、汇点} f:text;
增广后的F

运筹学-15最大流

运筹学-15最大流
• 截量=2+6+20=10
v2 (5,5) v4
(2,2)
(4,3)
V1
[0, ]
(6,6)
(7,0)
(10,8)
(2,0)
v3 [1,+] (2,2) v5
(8,5)
v6
(5,5)
最小截的容量影响总运输量的提高
• 某河流中有几个岛屿,从两岸及各岛屿之间的 桥梁联系情况如图所示.在一次敌对的军事行 动中,问至少要炸毁几座桥梁?哪几座桥梁?才 能完全切断两岸的交通联系.
1.标号过程(找增广路1)
1)v1标[0, ]
v1(V1,V2),u12= x12 =2, 不标号; v2 (5,5) v4
v1(V1,V3),u13=10, x13 =6, 标号;[+4, v1]
v1无
(2,2)
V1 (6,6)
[0, ) (10,6)
(4,3) (7,0)
(2,2)
(8,3)
• 也可以从“汇”处 看,它的最大流为
5+5=10
最 • 两家工厂v1,v2生产一种商品,商品通过如

图的网络运送到市场v8,v9,v10.试用标号法确 定从工厂到市场所能运送最大运量。




有两个起

点,三个
终点?






增加一个起点vs,一个终点 vt 。

vsv1的最大流量为什么定为30 它后面流量的总和
第6章 图与网络分析
第4章 网络的最大流
Maximal Flow Algorithm
最大流问题
• 一 现实用途: • 输油管网络;(油流量) • 公路交通网络;(车流量) • 通讯信息系统网络;(信息流量) • 输气管网络;(天然气流量) • 二 最大流问题可以转化为网络最小费用流问

15(最大流问题)PPT课件

15(最大流问题)PPT课件

21.03.2021
.
32
现在我们把一个网络看成是一 个自来水管网络,煤气管网络,电 力线网络或公路网络,铁路网络, 水运交通网络等,都可以归纳成一 个运输问题,称为网络流,值得关 心问题是在这样一个网络中最大流 为多少?
21.03.2021
.
33
定义(流)若对网络N,函数f满足如下 条件:
(1)0 fij Cij (i,j)E(N) (2)f-(vi) = f+(vi) iV(N) 则称f为N的一个网络流,简称流。
(1) 起点标号(∞) (2) 选一个点vi已标号且另一端未标号的弧沿着某条链向
收点检查
(a)如果弧是前向弧且有fij<cij,则vj标号 θj=cij﹣fij
(b)如果弧是后向弧且有fij﹥0,则vj标号θj=fij
21.03.2021
.
20
当收点已得到标号时,说明已找到增益路径,依 据v的标号反向追踪得到一条增益路径。当收点不能得 到标号时,说明不存在增益路径,计算结束
示该边所代表的链路把物质从i送到j的数量上限)。
满足以上特性的有向图称为流量网络。
21.03.2021
.
2
设源点与汇点分别是物质流中惟一的出发地和目 的地。
进入中间点物质总量必须等于离开物质总量,这 个条件称为能量守恒要求。
如果用xij来标记通过边(i,j)传输量,则:
21.03.2021
21.03.2021
.
11
增益路径法性能退化
2次得到最大流量值方法:
沿路径1→2 →4 对流量0进行增益。 沿路径1→3 →4 对流量0进行增益。
增益路径法依赖于路径生成次序,生成次序不恰 当,会对该方法效率产生巨大的影响。

运筹学05.6最大流

运筹学05.6最大流

前向弧(forward arc):与P的方向一致的弧 后向弧(backward arc):与P的方向相反的弧
2011-3-10
7
运筹学
Operations Research
(S Th1 设f是任一可行流, , S )是任一割,则 (1)val ( f ) ≤ c( S , S ) (2)val ( f ) = c( S , S ) ⇔ ( S , S )中的前向弧均为饱和弧, 后向弧均为零弧. ▌
5
运筹学
Operations Research
零流(zero flow):弧的流量都是0的流. 零流是可行流,且流值为0.
最大流(maximum flow):流值最大的可行流. N 最大流问题:在网络N 中找一个最大流.
弧的分类: (1)按流量和容量的大小关系分:
f 饱和弧(saturated arc): ( a ) = c(a )
不饱和弧(unsaturated arc):f ( a ) < c ( a )
2011-3-10
6
运筹学
Operations Research
(2)按流量和0的大小关系分: 零弧(zero arc): f ( a ) = 0 非零弧(nonzero arc,positive arc):f (a ) > 0 (3)按流量和有向路的关系分: 设P是一条有向(s,t)-路,其方向为s→ t.
可行流(feasible flow):
(1)∀a ∈ A,有0 ≤ f (a) ≤ c(a);
(2) f + ( s) = f − (t );∀v ∈ I,有f + (v) = f − (v).
流值(flow value):val ( f ) = f + ( s ) = f − (t )

运输网络最大流问题ppt课件

运输网络最大流问题ppt课件

(s,1) (4,3) (4,t)
24
s, v1,v2,v3
v4,t
(2,4) (3,t)
14
s, v1,v2, v4
v3,t
(1,3) (4,3) (4,t)
25
s, v1,v2,v3,v4
t
(3,t) (4,t)
15
篮球比赛是根据运动队在规定的比赛 时间里 得分多 少来决 定胜负 的,因 此,篮 球比赛 的计时 计分系 统是一 种得分 类型的 系统
篮球比赛是根据运动队在规定的比赛 时间里 得分多 少来决 定胜负 的,因 此,篮 球比赛 的计时 计分系 统是一 种得分 类型的 系统
篮球比赛是根据运动队在规定的比赛 时间里 得分多 少来决 定胜负 的,因 此,篮 球比赛 的计时 计分系 统是一 种得分 类型的 系统
一、引言
1.应用背景 在许多实际的网络系统中都存在着流量和最大流问题。 例如铁路运输系统中的车辆流,城市给排水系统的水
μ ( 1 , v 2 v ) ( 3 , , v 6 v ) ( 6 , , v 7 v )μ (3v ,v2)
μ 是一个增广链 显然图中增广链不止一条
篮球比赛是根据运动队在规定的比赛 时间里 得分多 少来决 定胜负 的,因 此,篮 球比赛 的计时 计分系 统是一 种得分 类型的 系统
我们把这样的图D叫做一个容量网络,简称网络,记做 D=(V,A,C)。
弧的容量: 是对网络上的每条弧(vi,vj)都给出一个最大的通过能力, 记为c (vi,vj)或简写为cij 。
篮球比赛是根据运动队在规定的比赛 时间里 得分多 少来决 定胜负 的,因 此,篮 球比赛 的计时 计分系 统是一 种得分 类型的 系统
13 (5)

835 福特-福尔克森最大流算法

835 福特-福尔克森最大流算法

福特-福尔克森最大流算法Ford-Fulkerson Algorithm定理假设f是网络G=(V, E, s, t, c) 的一个流,则以下陈述等价:(a)f 是一个最大流(b) 当前f的剩余图中不存在可增广道路(c) 存在G的一个s-t割(S, T)使得| f | = cap( S, T )由(a)和(b)的等价性可以给出最大流的构造算法——福特-福尔克森最大流算法(Ford-Fulkerson,1956):最大流算法Ford-Fulkerson (G)输入:网络G = ( V, E, s, t, c )输出:G的一个最大流f1.初始流量选为0流量,即对所有边uv,f uv ← 02.构造G关于f的剩余图G f3.若G f中存在增广道路P,则按照前述方法由增广道路P构造G的一个新的流f ’,f←f ’,转到步骤2;否则输出fs234 5t10 1098 410106 2 0 0 0 0 0 0 0 0 G:0 流 容量Flow value = 0s23 4 5t101098 4101062G f :8 0 0 0 0 8 8 0 0s2345t1029842 1062G f :8 8Flow value = 8s234 5t1010 98 41010 6 2 8 0 0 0 0 8 8 00 G:s2345 t 1010984101062100 2 1082G: 0s2345 t 1010784101062G f:2Flow value = 10s2345 t 10109841010621066 8 1082G: 6s2345 t 41018410462G f:866Flow value = 16s2345 t 101098410106210288 8 108G: 6s2345 t 21018210262G f:88 82Flow value = 18s2345 t 101098410106210399 9 107G: 6s2345 t 11097110162G f: 19 93Flow value = 19s2 3 4 5 t 10 10 9 8410 10 6 2 10 39 991070 G: 6如果各边的容量都是整数,则每次“f ←f ’”的更新都使得流的值至少增加1,因此算法至多在 次后结束()sv v succ s c ∈∑E nd。

04 最大流

04 最大流

f
ij

• 最大流问题是一个特殊的线性规划问题。即求一组 {fij},在满足条件①和②下使v(f)达到极大。将会看 到利用图的特点,解决这个问题的方法较之线性规划 的一般方法要方便、直观得多。
增广网络
作出一个和原网络G具有相同顶点并具有相同发点和收点的增 广网络G’,G’包含两类边,对G中每一条边(i,j): 1.若fij<cij ,作正向边(i,j),规定容量c’ij=cij –fij,即剩余容量。(正 规边) 2.若fij>0,作反向边(j,i), 规定容量c’ ji= fji, c’ ji事实上是边(j,i),上最 多可以减少的容量.(增广边) 如果增广网络上存在着由s到t的通路P(称为原网络的一条增广 路)
思考题
• 四个人:张三、李四、王五、赵六,四种乐器: 小提琴、大提琴、钢琴、吉他。 • 已知四人的擅长如下: • 张三擅长拉大提琴和弹钢琴; • 李四擅长拉小提琴、大提琴和吉他; • 王五擅长拉小提琴、大提琴; • 赵六只会弹吉他。 • 今假设四人同同台演出,每人各奏一种乐器,问 四人同时各演奏一种乐器时所有可能的方案,试 把此问题化为最大流问题。
量多的人能就业。 其中 x1 ,, x5 表示工人。
y1 ,, y5 表示工作。
x1
y1 y2
x2
x3
x4
y3
y4
x5
y5
x1
y1 y2
x2
vs
x3
x4
y3
y4
vt
x5
y5
二部图中最大匹配问题,可以转化为最大流问题求解。在 二部图中增加两个新点 vs , vt 分别作为发点,收点。并用 有向边把它们与原二部图中顶点相连,令全部边上的容量 均为1。当网络流达到最大时,如果 ( xi , y j ) 上的流量为1,

网络流(最大流-Dinic算法)

网络流(最大流-Dinic算法)

⽹络流(最⼤流-Dinic算法)⽹络流定义  在图论中,⽹络流(Network flow)是指在⼀个每条边都有容量(Capacity)的有向图分配流,使⼀条边的流量不会超过它的容量。

通常在运筹学中,有向图称为⽹络。

顶点称为节点(Node)⽽边称为弧(Arc)。

⼀道流必须匹配⼀个结点的进出的流量相同的限制,除⾮这是⼀个源点(Source)──有较多向外的流,或是⼀个汇点(Sink)──有较多向内的流。

⼀个⽹络可以⽤来模拟道路系统的交通量、管中的液体、电路中的电流或类似⼀些东西在⼀个结点的⽹络中游动的任何事物。

————维基百科 最⼤流 正如可以通过将道路交通图模型化为有向图来找到从⼀个城市到另⼀个城市之间的最短路径,我们也可以将⼀个有向图看做是⼀个“流⽹络”并使⽤它来回答关于物料流动⽅⾯的问题。

设想⼀种物料从产⽣它的源结点经过⼀个系统,流向消耗该物料的汇点这样⼀个过程。

源结点以某种稳定的速率⽣成物料,汇点则以同样的速率消耗物料。

从直观上看,物料在系统中任何⼀个点上的“流量”就是物料移动的速率。

这种流⽹络可以⽤来建模很多实际问题,包括液体在管道中的流动、装配线上部件的流动、电⽹中电流的流动和通信⽹络中信息的流动。

我们可以把流⽹络中每条有向边看做是物料的⼀个流通通道。

每条通道有限定的容量,是物料流经该通道时的最⼤速率,如⼀条管道每⼩时可以流过200加仑的液体。

流⽹络中的结点则是通道的连接点。

除了源结点和终结点外,物料在其他结点上只是流过,并不积累或聚集。

换句话说,物料进⼊⼀个结点速率必须与其离开该结点的速率相等。

这个性质称为“流量守恒”,这⾥的流量守恒与Kirchhoff电流定律等价。

在最⼤流问题中,我们希望在不违反任何容量限制的情况下,计算出从源结点运送物料到汇点的最⼤速率。

这是与流⽹络有关的所有问题中最简单的问题之⼀().,这个问题可以由⾼效的算法解决。

⽽且,最⼤流算法中的⼀些基本技巧可以⽤来解决其他⽹络流问题。

dinic算法(最大流)

dinic算法(最大流)
procedure add(a,b,c:longint);
begin
e[tot1].point:=b; e[tot1].next:=first[a]; e[tot1].c:=c; first[a]:=tot1; inc(tot1);
end;
procedure init;
var i,x,y,q:longint;
begin
tot1:=2;
readln(n,m);
for i:=m+2 to n+m+1 do
begin
read(a1); add(in+m+2,a1);
add(n+m+2,i,0);
end;
for i:=2 to m+1 do
bfs;
while h[t]<n do{如果在分层图中找得到汇点}
begin
inc(tot,dfs(s,maxlongint));{根据分层图增广}
bfs;{根据新的流量构建分层图}
end;
end;
Begin
init;
main;
writeln(j-tot);
End.
STEP2:用增广路算法计算L的最大流F,若在L中找不到增广路,算法结束。
SETP3:根据F更新G中的流f,转STEP1。
分层网络的构造算法:
STEP1:标号源节点s,M[s]=0。
STEP2:调用广度优先遍历算法,执行一步遍历操作,当前遍历的弧e=v1v2,令r=G.u(e)-G.f(e)。
function dfs(now,low:longint):longint;{根据分层图增广,low表示到now为止最多可增广流量}

运筹学第7章最大流问题 PPT

运筹学第7章最大流问题 PPT
(3)重复步骤(2),直到vt成为标号点或所有标号点 都检查过。若vt成为标号点,表明得到一条vs到vt的 增广链,转入调整过程;若所有标号点都检查过, 表明这时的可行流就是最大流,算法结束。
调整过程:在增广链上,前向边流量增加l(vt),后 向边流量减少l(vt)。
下面用实例说明具体的操作方法:例
v2 (4,3) (3,3)
vs (5,1)
(1,1) (1,1)
v1 (2,2)
v4 (5,3)
(3,0) vt (2,1)
v3
在图中给出的可行 流的基础上,求vs 到vt的最大流。
(-vv21,1)(4,3)
(3,3)
(v2,1)
v4 (5,3)
(,+∞)
vs (5,1)
(1,1) (1,1)
(v3,1)
下图中已经标示出了一个可行流,求最大流
v[2vs, 4] (4, 0)
(4, 0)
[, ∞] vs
(1, 0) (1, 0)
[v2,v44]
(3, 2)
(5, 2)
vs [v4, 3]
(2, 0)
(5, 2)
v1
[vs, 3]
(2, 2)
v5
(4, 0)
v3
[-v4, 2]
如图已经得到增广链,然后进行调整。
网络的总流量。
可行流总是存在的,例如f={0}就是一个流量为0的可 行流。
所谓最大流问题就是在容量网络中寻找流量最大的可 行流。
一个流f={fij},当fij=cij,则称f对边(vi, vj)是饱和的, 否则称f对边(vi, vj)不饱和。对于不饱和的,其间隙为 δij=cij-fij
最大流问题实际上是一个线性规划问题。

第四节 最大流问题

第四节 最大流问题

v4
(11,6)
v1
(3,3)
(17 ,2)
v6
v5
8
v3
(6,3)
v2
(10,5) (3,2) (4,1) (8,3) (5,1)
(5,2)
v4
(11,6)
v1
(3,3)
(17,2)
v6
v5
µ = (v1,v2,v3,v4,v5,v6 )
+ µ ={(v1,v2) ,(v2,v3), (v3 , v4),(v5,v6)}
23
(-v2,2) v1
(5,1) (2,2) (2,2)
v3 (v1,2)
(6,3) (2,0) (5,2)
(3,3)
(0, +∞)
vs
(6,2)
vt
(v3,2)
(vs,4)
v2
(3,2)
v4
(v2,1)
24
(-v2,2)v1
(5,1)
(2,2) (2,2) (3,2)
v3
(v1,2)
(3,3)
1 (-2, l(v3)), 这里 l (v3 ) minl (v2 ), f32 min ,1 1,
18
在弧(v1,v3)上,f13=2, c13=2,不满足标号条件。 (4)检查v2,在弧(v3,v2)上,f32=1>0, 给v3标号
(-v1,1)
v2
(4,3) (1,1)
如所有fij=0, V( f ) 零流。
V( f ) 称为可行流 f 的流量,即发点的净输出量。
6
(3). 最大流
若 V(f *) 为网络可行流,且满足: V(f *)=Max{V(f )∣f }为网络D中的任意 一个可行流,则称f *为网络的最大流。
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

4 23 4
1
2
5
6
34
5
简单路:13 245中。
(1,3)(2,4)(4,5)是正向边。(3,2)是逆向边。
11
增广路径:
若路径上所有的边满足: ①所有正向边有:f ( u, v ) < c ( u, v)
②所有逆向边有:f ( u, v ) > 0 则称该路径为一条增广路径(可增加流量)
2 32
16
2 32
1
4
2
2
22
4
2
5
6
34
5
2
3、一条增广路径: 13 2 4 5
d=min{6,2,3-2,5-2} =1 增加流量: 1
1
4
2
2
2 32 1 4
2 2-1=1 5
2
1
6
1
34
5
2
Sum=4+1=5
2->3减少1,加到2->4 2->3减的1由1->3补充1
17
1
4
2
2
2 32 1 4
4
2
2
2
2
4
52
d ( v, u ) = f ( u, v )
6
d ( u, v ) 是 从 u 到 v 能增加的最大流量
34 5 2
理解: (u,v) 的流量为f(u,v),作为正向边还可以增加的量是c ( u, v ) – f ( u, v ),作为逆向边,还可以增加的流量为: f ( u, v )。
end; writeln(sum); {输出最大流} for i:=1 to n do {输出每条边的流量}
for j:=1 to n do if f[i,j]>0 then writeln(i,'-->',j,' ',f[i,j]);
24
优化
2 32
1 • 残留网络 d 的设置: 若存在 ( u, v ) 则 d ( u, v ) = c ( u, v ) – f ( u, v )
2 ) 对与该增广路径上的边 若( u, v ) 是正向边,f ( u, v ) = f ( u, v ) + d; 若( u, v ) 是逆向边,f ( u, v ) = f ( u, v ) – d;
增广后,总流量增加了d
13
样例:
4
1
6
23
2
34
4
5
5
开始流量为:sum=0
14
23
4
4
1
2
22
2) procedure addflow;//沿增广路径增广(增加流量)
d:=maxint; {增量} i:=n; {沿增广路径的终点向起点反向求d}
while b[i]<>0 do
begin
if c[b[i],i]>0 then d:=min(d,c[b[i],i]-f[b[i],i]); {正向边}
5
6
34
5
4 23 4
1 2 22
5
6
3
4
2
5
1、一条增广路径: 1235 d=min{4,2,4} =2 增加流量: 2 Sum=2
15
4 23 4
1
2
22
5
6
3
4
2
5
2 32
1
4
2
2
22
4
2
5
6
34
5
2
2、一条增广路径: 1245 d=min{4-2,3,5} =2 增加流量: 2 Sum=2+2=4
2 2-1=1 5
2
1
6
1
34
5
2
1
4
2
2
2 32 1 4
2 2-1=1 5
2
1
61 2 3
4
22
5
4、一条增广路径: 13 5 d=min{6-1,4-2} =2 增加流量: 2 Sum=5+2=7
18
• 定理: 可行流 f 为最大流,当且仅当不存在关于f
的增广路径 证:若 f 是最大流,但图中存在关于 f 的增广 路径,则可以沿该增广路径增广,得到的是一 个更大的流,与f 是最大流矛盾。所以,最大 流不存在增广路径。
9
二、最大流算法
◆Ford-Fulkerson (福特-福克森)算法: 步骤:
(1)如果存在增广路径,就找出一条增广路径 (2)然后沿该条增广路径进行更新流量
(增加流量)
10
1、增广路径
• 从 s 到 t 的一条简单路径,若边 ( u, v ) 的方向与 该路径的方向一致,称 ( u, v ) 为正向边,方向不 一致时称为逆向边。
[ dec(d[b[i],i],min); inc(d[i,b[i]],min);
i:=b[i];] inc(sum,min);
sum是总流量
28
问题1:奶牛的新年晚会
奶牛们要举办一次别开生面的新年晚会。每头奶牛会做一 些不同样式的食品(单位是盘)。到时候他们会把自己最拿 手的不超过k样食品各做一盘带到晚会,和其他奶牛一起分 享。但考虑到食品太多会浪费掉,他们给每种食品的总盘数 都规定了一个不一定相同的上限值。这让他们很伤脑筋,究 竟应该怎样做,才能让晚会上食品的总盘数尽量的多呢?
例如:有4头奶牛,每头奶牛最多可以带3盘食品。一共有 5种食品,它们的数量上限是2、2、2、2、3。奶牛1会做 食品1…4,奶牛2会做食品2…5,奶牛3会做食品1、2、4, 奶牛4会做食品1…3。那么最多可以带9盘食品到晚会上。 即奶牛1做食品2…4,奶牛2做食品3…5,奶奶3做食品1、 2,奶牛4做食品1。这样,4种食品各有2、2、2、2、1盘。
21
1):DFS找增广路径
function findflow(k:integer):boolean; {找结点k的后继结点i } var i:integer; begin if k=n then exit(true); {找到了一条增广路径} for i:=1 to n do if(b[i]=-1) and((c[k,i]-f[k,i]>0)or(f[i,k]>0)) then begin b[i]:=k; if findflow(i) then exit(true); end; exit(false); end;
网络流初步
1
◆ 最大流算法 ◆ 最小费用最大流 ◆ 最大流最小割定理
2
网络流之一
最大流算法
3
实例:
有一自来水管道输送系统,起点是S,目标是T, 途中经过的管道都有一个最大的容量。
7 1S
6
4
3
3 4
4
2
2
4
5
6t
8
• 问题:问从S到T的最大水流量是多少?
4
4 7
4 1S
66 2
32 3
42
22
]
exit(false);
没找到增广路
27
增广过程
min:=maxint;
i:=n; while b[i]<>0 (i<>1) do //逆向求增加流min
[ if min>d[b[i],i] then min:=d[b[i],i];
i:=b[i];]
i:=n; while b[i]<>0 (i<>1) do// //逆向修改流量
44
5
44
6t
86
最大水流量是10
5
一、网络流的定义
有向图 G = ( V, E )中:
• 有唯一的一个源点S(入度为0:出发点) • 有唯一的一个汇点 T(出度为0:结束点) • 图中每条弧 (u, v) 都有一非负容量 c ( u, v ) 满足上述条件的图G称为网络流图。 记为: G = ( V, E ,C)
29
奶 牛
31
食 品
12 22
32
S
3 3
3
32
T
2
43
4
权=1 5
边:S奶牛, 保证每头奶牛带的食品的最大量。
边:食品T, 保证每种食品的最大数量。
食品的总盘数最大值=S到T的最大流
30
奶 牛
31
食 品
12 22
32
S
3 3
3
32
T
2
43
4
权=1 5
S到T的最大流=9
31
应用

求二分图的最大匹配
6
1、可行流
◆每条弧 ( u, v )上 给定一个实数f(u,v),满足:有 0 <= f ( u, v ) <= c( u, v ),则f(u,v)称为弧( u, v )上的流量。
◆如果有一组流量满足条件: 源点s : 流出量 = 整个网络的流量 汇点t : 流入量 =整个网络的流量 中间点:总流入量 = 总流出量
while open<closed do
[ inc(open); k:=a[open];
for i:=1 to n do
d 是残余流量
if (b[i]= -1) and (d[k,i]>0) then
[inc(closed); a[closed]:=i; b[i]:=k;
if i=n then exit(true); 找到增广路]
19
◆Ford-Fulkerson方法(增广流)求最大流
(福特-福克森)
步骤: (1)如果存在增广路径,就找出一条增广路径 DFS,BFS (2)然后沿该条增广路径进行更新流量 (增加流量)
相关文档
最新文档