15.最短路问题及算法

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

首先写出带权邻接矩阵
1 0 2 3 2 7 4 2 0 1 3 1 0 3 5 3 0 4 6 4 0 6 3 6 0 2 8 7 4 2 0
因G是无向图,故W 是对称阵.
0 1 2 W 7 4 8
5
6
3
7 4
迭 次
代 数
u0
l (u i )
u1


u2
2
2
u3
u4
7
7 7 6
6
u5
u6
u7
1 2 3 4 5 6 7 8 最后标记
l (v)
z (v )

4
3
9
9 9
9
4
4 4
4
8
8 8 8 6
6
0
u0
1
u0
2
u0
3
6
(I)求距离矩阵的方法.
设赋权图G 的顶点集为V {v1, v2 ,, v }.
1) 写出赋权图G 的带权邻接矩阵W , 把它作为距离矩阵的
( 0) 初值,即 D(0) (dij ) ( wij ) W .
2)对 k 1,2,, ,计算
(k ) ( k 1) ( k 1) ( k 1) (k ) min{dij , dik d kj }, D( k ) (dij ) , 其中 dij
(k ) 表示从 vi 到 v j 且中间点仅为 v1, v2 ,, vk 的 k 个点的所有 dij
路径中的最短路的长度。
( ) ( ) 于是, D( ) (dij 就是从 vi 到 v j 的路径中间可 ) 中元素 dij
插入任何顶点的路径中最短路的长度, 即 D( ) 就是所求距离矩阵.
算法步骤:
1) 赋初值:令 S={u0 }, l (u0 )=0, v S V \ S , 令 l (v) =W (u0 , v) , z (v) =u0 ,
u0 l(u)
u u0
l(v)
v w(u,v)
u 2)更新l (v) 、 z (v) : v S V \ S ,若l (v) > l (u ) W (u, v) 则令l (v) =l (u ) W (u, v) , z (v) =u
(II)求路径矩阵的方法.
在建立距离矩阵的同时可建立路径矩阵R.
(k ) (k ) 设 R( k ) (rij 的含义是从 vi 到 v j 的最短 ) ,这里 rij (k ) 路要经过点号为 rij 的点. ( 0) ( 0) 算法开始于 R(0) (rij ) , rij j,
定义 1) 若H是赋权图G的一个子图,则称H的各 边的权和 w( H ) w(e) 为H的权. 类似地,若
eE ( H )
若P(u,v)是赋权图G中从u到v的路,称 w( P ) 称为路P的权.
eE ( P )
w(e)
2) 在赋权图G中,从顶点u到顶点v的具有最小权 的路P*(u,v),称为u到v的最短路. 3) 把赋权图G中一条路的权称为它的长,把(u,v) 路的最小权称为u和v之间的距离,并记作 d(u,v).
u3
9
u3
4
u0
6
u6
u2
u1
u7 u0
u2 u4
u5 u3Biblioteka Baidu
u6
2) 求赋权图中任意两顶点间的 最短路
• 算法的基本思想
• (I)求距离矩阵的方法. •(II)求路径矩阵的方法. •(III)查找最短路路径的方法. • Floyd算法:求任意两顶点间的最短路.
• 举例说明
算法的基本思想
直接在图的带权邻接矩阵中用插入顶点的 (1) (2) ( ) 方法依次构造出 个矩阵 D 、 D 、 … 、 D , 使最后得到的矩阵 D( )成为图的距离矩阵,同 时也求出插入点矩阵以便得到两点间的最短路 径.
最短路问题及算法
2011.5.11
最短路问题及算法
最短路问题是图论应用的基本问题,很多实际 问题,如线路的布设、运输安排、运输网络最小费 用流等问题,都可通过建立最短路问题模型来求解. •最短路的定义 •最短路问题的两种方法:Dijkstra和Floyd算法 . 1) 求赋权图中从给定点到其余顶点的最短路. 2) 求赋权图中任意两点间的最短路.
3)设 v* 是使l (v) 取最小值的 S 中的顶点,则令 S=S∪{ v* },u v* 4) 若 S φ ,转 2,否则,停止.
用上述算法求出的l (v) 就是u0 到 v 的最短 路的权, 从 v 的先驱点标记 z (v) 追溯到u0 , 就得 到u0 到 v 的最短路的路线.
例 求下图从顶点u0到 其余顶点的最短路.
短路过点 vk 比过原有中间点更短.
在求得 D( ) 时求得 R ( ) ,可由 R ( ) 来查找任何点对之间
最短路的路径.
(III)查找最短路路径的方法.
( ) 若 rij 则点 va1 是点 vi 到点 v j 的最短路的中间点. a1,
(k ) 迭代到第 k 步, rij
( k 1) ( k 1) ( k 1) 若dij dik d kj , k, ( k 1) , 否则 rij
即由 D ( k 1) 到 D( k ) 迭代,若某个元素改变(变小) ,则由 R ( k 1) 到
R ( k ) 迭代中,相应元素改为 k ,表示到第 k 次迭代,从 vi 到 v j 的最
对每个顶点,定义两个标记(l(v),z(v)),其中: l(v) :表从顶点u0到v的一条路的权. z(v) :v的先驱点,用以确定最短路的路线. 算法的过程就是在每一步改进这两个标记,使最终 l(v)为从顶点u0到v的最短路的权. S:具有永久标号的顶点集. 输入: G的带权邻接矩阵 w(u,v)
1) 赋权图中从给定点到其余顶点的最短路 最短路是一条路,且最短路的任一节也是最短路. 求下面赋权图中顶点u0到其余顶点的最短路.
假设G为赋权有向图或无向图,G边上的权均非 负.若 (u, v) E (G) ,则规定 w(u, v) .
Dijkstra算法:求G中从顶点u0到其余顶点的最短路 设G为赋权有向图或无向图,G边上的权均均非负.
相关文档
最新文档