运筹学05_图与网络分析2-最短路

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

v4
v7
-1
42
终 点
lij
P(t)1j
起 v1 v2 v3 v4 v5 v6 v7 v8 t=1 t=2 t=3 t=4 点
v1 0 -1 -2 3 0 0 0 0
v2 6 0 2 -1 -5 -5 -5
v3 -3 0 -5 1 -2 -2 -2 -2
v4 8 0 2 3 -7 -7 -7
60
v1 v2 v3 v4 v5 v6 0 0 12 1 04 5 2 2 0 5 5 1 4 0 6 v5 2 3 0 v6 2 2 0
61
v1 v2 v3 v4 v5 v6 0 0 12 1 04 5 2 2 05 5 1 4 0 6 3 23 0 v6 2 2 0
54
v1 v2 v3 v4 v5 v6 0 0 12 1 04 5 v3 2 0 5 1 1 4 0 4 v5 2 3 0 v6 2 2 0
55
v1 v2 v3 v4 v5 v6 0 0 12 1 04 5 v3 2 0 5 1 1 4 0 4+2 v5 2 3 0 v6 2 2 0
0
2
7
1
5 3 5 55 7
1
3
3
1
4
6
7
5
12
③从已标号的点出发,找与这
(1,2)
2
些相邻点最小权数(距离)者, 找到之后:标号;边变红。
2
0
2
7
1
5 3 5 55 7
1
3
3
1
34 5 6
7
13
④重复上述步骤,直至全部的
(1,2)
点都标完。
2
2
0
2
7
1
5 3 5 55 7
3
1
4
3
1
6
7
(1,3)
二、最短路的矩阵算法 首先写出弧长矩阵D 第一步:划去矩阵D中第一列,并 给第一行以标号0。
45
第二步:在已标号中未划去的元素中, 寻找出最小的元素aij并圈起来,此时把 第j列划去,同时给第j行标号i。并把第j 行中未划去的各元素都加上aij。
第三步:如果各行均已获得标号,则停 止,并利用标号倒向追踪,得到v1到各 点的最短路。
48
v1 v2 v3 v4 v5 v6 0 0 12 v2 0 3 4 v3 2 0 5 1 v4 4 0 4 v5 2 3 0 v6 2 2 0
49
v1 v2 v3 v4 v5 v6 0 0 12 v2 0 3 4 v3 2 0 5 1 v4 4 0 4 v5 2 3 0 v6 2 2 0
1
3
3
1
4
6
7
(1,3)
5
(3,7)
20
(1,2)
2
2
0
1
2
5
(2,4)
3
3
1
4
(1,3)
5
7 (6,8)
5 55
3

6
7
(3,7)
(5,13)
7
21
(1,2)
2
2
0
1
2
5
(2,4)
3
3
1
4
(1,3)
5
7 (6,8)
5 55
3
1
6
7
(3,7)
(5,13)
7
22
对有向图同样可以用标号算法:
例2 如图,有一批货物要从v1运 到v9,弧旁数字表示该段路长, 求最短运输路线。
v3 (1,3)
-2
5
3 v2 (1,2) -1
2
-2
5
3 v2 (3,1) -1
2
v1
v4
v1
v4
(0)
4
(2,1)
(0)
4
(2,1)
v3 (1,3)
-2
5
3 v2 (3,1)
-1 2
v1
(0)
4
v4 (2,0)
41
v2
-1
v5
6
-3
2
1 -3
v1
-1 -2
v3
1 v6
7
v8
8 -5 2
3
1
-5
3 1
6 (1,3) 3 V3 V1 (0)
4
10
2
V8
V4
V7 V6
(5,9)
(5,12)
(1,1)
(5,10)
37
Dijkstra算法的不足
Dijkstra算法仅适合于所有的权lij0的情形。如果当赋权有向图中存在有负权 弧时,则该算法失效。 根据Dijkstra算法,可以得出从v1到v2最短路权是2,但是这显然不对,因为从 v1到v2的最短路是(v1, v3, v2),权是-1。
(P0
)
min P
(P)
路P0的权称为从vs到vt的距离,记为d(vs,vt)。
4
求网络上的一点到其它点 的最短路
Dinkstra标号法
• 这是解决网络中某一点到其它点的最 短路问题时目前认为的最好方法。
• 适用于有向图权值非负的情况
5
有向图权值非负---- Dijkstra算法
Dijkstra算法的基本步骤(权值非负)
v5 -1 0 1 -3 -3
v6 1 0 1 7 -1 -1 -1
v7 -1 0 5 -5 -5
v8 -3 -5 0 6 6
43
无向图
2
v1
3
v2
v5
5 1
4
v4
3
1 v3
将边[vi,vj]看作两条弧, (vi, vj)和(vj, vi)
44
23
3 0 v1
4
v5
3
5
v2
3
v6
2.5
v9
2
3
1
2
v3
4
v7
2
3
v8
v4
24
v5
3
5
3
v2
3
3
v6
2.5
v9
0
v1
2
3
1
2
v3
4
4
v7
2
3
v8
v4
25
v5
3
5
3
v2
3
3
v6
2.5
v9
0
v1
2
3
1
2
v3
4
4
v7
2
3
v8
v4
26
v5
3
5
3
v2
3
3
v6
2.5
v9
0
v1
2
3
1
2
v3
4 3
4
4
v7
v1
2
53
1
2
v3
4 3
4
4
v7
2
v8
v4
31
6 v5
3
5
3
6
v2
3
3
v6
2.5
v9
0
v1
2
53
1
2
v3
4 3
4
4
v7
2
v8
v4
32
6 v5
3
5
3
6
v2
3
3
v6
2.5
v9
0
v1
2
53
1
2
7
v3
4
4
v7
2
3 4
v8
v4
33
6 v5
3
5
3 6
8.5
v2
3
3
v6
2.5
v9
0
v1
2
53
1
2
7
v3
4
4
v7
进度。从办公室到各车间的路线由图1给出。找出点1
(办公室)到其它各点(车间)的最短路
27
2
2
15
3 5 55 7
1
3
3
1
4
6
7
5
7
2
权wij(dij) 距离、价格
2
2
15 3
点(vi)
边eij或记为(vi,vj)
8
①从点1出发,因L11=0, 在点1处标记 0
27
02
2
15
3 5 55 7
1
3
3
最短路问题
最短(通)路问题是最重要的 优化问题之一,例如各种管道的 铺设、线路的安排、厂区的布局、 设备的更新及运输网络的最小费 用流等。(最短距离、费时最少、 费用最省)
1
21
2
6
5
08
7
1
1
7
2
1
9
32
5
9 3
79
66
11 2 13
431 4
9
1
10
2
21
2
6
5
08
7
1
1
7
2
1
9
32
5
9 3
1、给顶点v1标号(0),v1称为已标号点,记标号点集为 V1={v1}
2、在未标号点集V2中找出与标号点集V1中的顶点vi有弧相连 (并且以vi为起点)的点vj,
3、在第2步选出的点中,选出满足下面条件的点vk,并给vk标
号(l,L1k),其中l为第一标号, L1k为第二标号
L1k L1l ωlk min L1i ωij vi V1 ,v j V2
1
2
5
(2,4)
7
3 5 55
7
1
3
3
1
4
6
7
(1,3)
5
7
17
(1,2)
2
2
0
1
2
5
(2,4)
3
7
5 55
7
1
3
3
1
4
6
7
(1,3)
5
(3,7)
18
(1,2)
2
2
0
1
2
5
(2,4)
3
5
78
55
7
1
3
3
1
4
6
7
(1,3)
5
(3,7)
19
(1,2)
2
2
0
1
2
5
(2,4)
3
7 (6,8)
5 55
7
L(m) 1i
ik
存在弧(vi , vk ),包括i k
3、如果对所有的点L1k(m)= L1k(m+1)都成立则逆向追踪, 找出最短路,算法终止;若存在L1k(m)> L1k(m+1),则令 m=m+1,返回第2步
39
• 求从v1到v4的最短路
v3
-2 3
v2
2
5 -1
v1
v4
4
40
v3 (1,3)
52
v1 v2 v3 v4 v5 v6 0 0 12 1 04 5 v3 2 0 5 1 v4 4 0 4 v5 2 3 0 v6 2 2 0
53
v1 v2 v3 v4 v5 v6 0 0 12 1 04 5 v3 2 0 5 1 v4 4 0 4 v5 2 3 0 v6 2 2 0
62
v1 v2 v3 v4 v5 v6 0 0 12 1 04 5 2 2 05 5 1 4 0 6 3 23 0 v6 2 2 0
63
v1 v2 v3 v4 v5 v6 0 0 12 1 04 5 2 2 05 5 1 4 0 6 3 23 0 5 2 2 0
64
v1 v2 v3 v4 v5 v6 0 0 12 1 04 5 2 2 05 5 1 4 0 6 3 23 0 6 2 2
2
v8
v4
27
v5
3
5
3
v2
3
3
v6
2.5
v9
0
v1
2
3
1
2
v3
4 3
4
4
v7
2
v8
v4
28
v5
3
5
3
v2
3
3
v6
2.5
v9
0
v1
2
53
1
2
v3
4 3
4
4
v7
2
v8
v4
29
v5
3
5
3
v2
3
3
v6
2.5
v9
0
v1
2
53
1
2
v3
4 3
4
4
v7
2
v8
v4
30
6 v5
3
5
3
6
v2
3
3
v6
2.5
v9
0
为从v1到vk的最短路的长度,l表示在从v1到vk的最短路上,与vk
相邻的点是vl
4、若最后一个顶点vn未标号,则转回第2步;若vn已标号,则
从vn开始,按照第一个标号逆向追踪,直到v1,就得到从v1到
vn的最短路,vn的第二个标号表示最短路的长度。
6
木器厂有六个车间,办事员经常要到各个车间了解生产
1
4
6
7
5
9
从已标号的点出发,找与这些
相邻点最小权数(距离)者,找
2 到之后:标号;边变红。
2
0
27
15
3 5 55 7
3
1
4
3
1
6
7
5
10
(1,2)
2
2
0
27
15
3 5 55 7
3
1
4
3
1
6
7
5
11
③从已标号的点出发,找与这
(1,2)
2
些相邻点最小权数(距离)者, 找到之后:标号;边变红。
2
v1
2
v2
2
-3
v3
38
有向图某些权值为负
逐次逼近算法
1、先对图中各个点按照Dijkstra算法标号,称之为第一 次标号,令m=1,转入第二步;
2、对图中除了v1以外的所有点进行m+1次标号,记 L1k(m+1)为对顶点vk的第m+1次标号的第二个标号值, 计算公式如下:
L(m1) 1k
min
若存在未标号行,返回第二步。
46
例 求v1到各点vj的最短路。
2
v2
v3
3
1
2
44
5
12
v6
v1
2 v4
2 4
v5 3
47
v1 v2 v3 v4 v5 v6 v1 0 1 2 v2 0 3 4 v3 2 0 5 1 v4 4 0 4 v5 2 3 0 v6 2 2 0
58
v1 v2 v3 v4 v5 v6 0 0 12 1 04 5 2 2 05 1 1 4 0 6 v5 2 3 0 v6 2 2 0
相关文档
最新文档