图论之最大流问题(二)

上一次我们把求最大流的问题转化成了找到一条增广路然后优化的问题。今天讲讲怎么找增广路。

Ford-Fulkerson算法(标号法)求增广路。

标号法的流程分为标记和调整两个阶段。在标记阶段中,为图中的每个顶点找一个优化方案。在调整阶段,利用标记阶段的记号,重新分配流量。可以看出来,标记法的核心是第一个阶段,怎么为每个顶点找到一个优化方案呢?很简单,只需要两个量就记下每个点的优化方案了。一个数记录需要优化的弧连接的是哪个顶点,另一个数记录能够优化的量。

在标记过程,网络中的顶点可以分为三类:

① 未标号顶点;

② 已标号,未检查邻接顶点;

③ 已标号,且已检查邻接顶点。

标号过程开始时,总是先给Vs标上(0, +∞),0表示Vs是汇点,+∞表示Vs可以流出任意多

的流量(先不讨论与之连接的弧能不能吸收这些流量)。这时Vs是已标号而末检查的顶点,其余都是末标号点。然后从源点Vs出发,使用广度优先搜索对它的每个邻接顶点进行标号。

假设已标号而未检查的顶点是u,对u的一个未标号顶点v:

a)若v与u“正向”邻接,且在弧上目前分配的流量f(u, v)<弧的容量c(u, v),则给v标号(u,L(v)),这里L(v)= min{ L(u), c(u, v)–f(u, v)},L(u)是顶点u能提供的标号,c(u,v)–f(u, v)是弧能接受的标号,取二者中的较小者。这时顶点v成为已标号而末检查的顶点。

b)若v与u“反向”邻接,且在弧< v, u>上f(v, u)>0,则给v标号( -u, L(v)),这里L(v) =min{L(u), f(v, u) }。这时顶点v成为已标号而未检查的顶点。

当u的全部邻接顶点都已检查后,u成为已标号且已检查过的顶点。

重复上述步骤直至标记到目的地点,若目的点可改进量α= 0,或者不能给目的点标号,则算法结束,这时的可行流即为最大流。算法结束。一旦目的点Vt被标号并且第2个分量大于0,则表明存在一条从Vs到Vt的增广路P,接下来要进入调整过程;

调整过程采用“倒向追踪”的方法,从Vt开始,利用标号顶点的第一个分量逐条弧地找出增广路P,并以Vt的第二个分量L(Vt)作为改进量α,改进P路上的流量。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 在前几天的文章里面,我们讲到求解最大流的关键是找到增广路,并且单独介绍了一个求增广路的Ford-Fulkerson...
    鹏抟九万阅读 3,648评论 1 2
  • 第一章 绪论 什么是数据结构? 数据结构的定义:数据结构是相互之间存在一种或多种特定关系的数据元素的集合。 第二章...
    SeanCheney阅读 5,807评论 0 19
  • 现实生活中有很大一类问题可以用简洁明了的图论语言来描述,可以转化为图论问题。 相关定义 图可以表示为G=(V, E...
    芥丶未央阅读 1,751评论 0 7
  • 天蝎座和上升天蝎座,一般都是霸道总裁或者是御姐的气质。他们自身具备了控制他人的能力。但是从婚姻的角度上来说,绝对不...
    星座论讯阅读 561评论 0 1
  • Chapter 1 好像每个女生对年龄都有一种奇特的敏感,18岁的时候自信无比,25岁的时候担心老去,30岁的时候...
    鹊慕阅读 698评论 0 2