第三章最短路问题
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
§3.2 求最短有向路的标号法
这一节介绍一种求有向图上最短有向路的方法 ,叫做标号法。
所谓标号,我们是指与图的每一个顶点对应的一个 数(或几个数).例如设G=(V,A)的顶点集合是V={v1,v2, …,vn},如果我们能使v1对应一个数b(1),v2对应数 b(2),…,vn对应数b(n),那么,这些数b(i)就称为vi的 标号,当然,在不同的问题中,标号b(i)一般代表不同 的意义.
上面两个问题都可以称为最短路问题.很容易看出, 这两个问题都有着大量的生产实际背景.事实上,大至 海、陆、空各种运输,小至一个人每天上班,都会遇到 最短路问题.正因为它用处大,所以近二、三十年来国 内外对这个问题进行了不少研究,也找到了许多比较好 的计算方法.
有趣的是,有些问题,从表面上看与最短路问题没 有什么关系,却可以归结为最短路问题.下面就来举两 个这样的例子:
大家也许会认为,这两个例子本来就不很难,把 它转化成图论问题,倒相当麻烦,有什么好处呢?其 实这种做法还是很有好处的.因为在转化前,想解决 这些问题,只能用凑的办法,或者最多是凭经验.而 转化成图论问题以后,就可以用一种系统的方法解决 了.
最后,还要指出一下,求最短有向路和求最短无 向路这两个问题是密切关联的.下面将看到,求最短有 向路的计算方法也可以用来求最短无向路.
作出了图G以后,渡河问题就归结为下述问题了: “在图G中找一条连接顶点MWSV与Ø,并且包含边 数最少的路”.如果我们设G的每条边的长度都是1,那 么也可以把渡河问题归结为:“找一条连接MWSV与 Ø的最短路”.
例2: 某两人有一只8升的酒壶装满了酒,还有两 只空壶,分别为5升和3升.现要将酒平分,求最少 的操作次数.
下面就来讲一下怎样把这个问题转化成最短路问 题.
我们用M代表人,W代表狼,S代表羊,V代表白菜. 开始时,设人和其他三样东西都在河的左岸,这种情 况,我们用MWSV来表示.又例如人带了羊渡到河的右 岸去了,这时左岸留下了狼和白菜,这种情况就用WV 来表示.例如MWS表示人(M)狼(W)羊(S)在左岸而白菜 (V)在右岸这种情况.那么总共可能有几种允许的情况 呢
回到我们要解决的最短有向路问题上来.为确定
起见,我们设vs=v1,vt=vn,也就是说我们要找的是从 v1到vn的最短有向路.下面介绍的方法可以把从v1到G 的每一个顶点vj的最短有向路都求出来(或者指出不 存在从v1到vj的有向路,即v1不可达vj).
我们把整个计算分成若干“轮”来进行(一个
“轮”就是一个大步),每一轮中,将求出v1到某一 个顶点vj的最短路以及这条最短路的长度b(j).我们 把b(j)就叫做顶点vj的标号.再强调一下,顶点vj的 标号代表的是从v1到vj的最短路的长度.另外,如果 说“顶点vj已经有标号了”或“vj是已标号点”,就 意味着从v1到vj的最短路以及这条最短路的长度都已 经求出来了.
现在我们就来构造一个图G,它的顶点就是这10 种情况,G中的边是按照下述原则来连的;如果情况 甲经过一次渡河可以变成情况乙,那么就在情况甲与 乙之间连一条边.
MWSV MWS MWV WSV MS
WV
W
S
V
Ø
例如,MWSV经过一次渡河可以变成WV(人带着羊 过河,左岸留下狼和白菜),又例如MWV经过一次渡河 可以变为W(人带着白菜过河,留下狼),或变为V.当 然反过来,W也可以变为MWV(人带着白菜从右岸返回 左岸).
例1 渡河问题:一个人带了一只狼、一只羊和一 棵白菜想要过河,河上有一只独木船,每次除了人以外, 只能带一样东西.另外,如果人不在旁时,狼就要吃羊, 羊就要吃白菜.问应该怎样安排渡河,才能做到把所有 东西都带过河去,而且在河上来回的次数又最少.
当然,这个问题不用图论也能解决.大家一眼就 能看出,第一次应该带着羊过河,让狼和白菜留下, 以下怎么渡法呢?
如果不管狼是否吃羊、羊是否吃白菜,那么总共 有16中情况,它们分别是:
MWSV, MWS, MWV, MSV, WSV, MW, MS, MV , WS, WV, SV, M, W, S, V, Ø(空集)
例如MS表示人和羊在左岸,而狼和白菜在右岸;Ø表 示左岸是空集,即人、狼、羊、白菜都已渡到右岸去 了.检查一下就可以知道,这16种情况中有6种情况是 不允许出现的.分别是:WSV, MW, MV, WS, SV, M. 例如WSV表示狼、羊、白菜都在左岸而人在右岸,因 为人不在旁边看着,狼就要吃羊,羊也要吃白菜;又如 MV表示人和白菜在左岸,而狼和羊在右岸,当然也是 不行的.因此,允许出现的情况只有10种.
在这一章中,我们假设遇到的图G都是简单图.这
样假设是合理的,因为如果G有平行弧或平行边,例
如有好几条从vi到vj的弧,那么很显然,可以把这些 弧中最短的一条留下,其余的都去掉,然后在剩下的
简单图上再来求从vs到vt的最短有向路.因为G是简单 图,所以每一条弧ak被它的起点vi与终点vj唯一决定, 因此,下面我们就用<vi,vj>或<i,j>来表示一条弧, 用(vi,vj)或(i,j)来表示边,而用l(i,j)来表示弧或 边的长度.
每种组合用一个点表示,若点u能通过倒酒的方式变 换为v,则 u向v 连有向边,并将各边赋权1,得一个有向 赋权图.
于是问题转化为在该图中求 (8,0,0)到(4,4,0)的一条最 短路(求最短路的算法在有向图中仍适用).结果如下:
(8, 0, 0) (3,5, 0) (3, 2,3) (6, 2, 0) (6, 0, 2) (1,5, 2) (1, 4,3) (4, 4, 0).
解 设x1,x2,x3分别表示8,5,3升酒壶中的酒量.则
x1 x2 x3 8, x1 8, x2 5, x3 3.
容易算出(x1,x2,x3) 的组合形式共24种.
(0,5,3);(1,5,2);(1,4,3);(2,5,1);(2,4,2);(2,3,3); (3,5,0);(3,4,1);(3,3,2);(3,2,3);(4,4,0);(4,3,1); (4,2,2);(4,1,3);(5,3,0);(5,2,1);(5,1,2);(5,0,3); (6,2,0);ຫໍສະໝຸດ Baidu6,1,1);(6,0,2);(7,1,0);(7,0,1);(8,0,0);