- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
v8
6
3
v9 v7
4
v4
10
v6
2
[5,v3]
v2
1
v5
4 10
6 [0,v1]
2
v1
3 1
2 6 v[ 3 3,v1] 2 [1,v1] 3
v8
6
3
v9 v7
4
v4
10
v6
2
[5,v3]
v2
1
[6,v2]
v5
6 [0,v1]
2
v1
3 1
2 6 v[ 3 3,v1] 2 [1,v1] 4 10 3
3 1
2 6 v[ 3 3,v1] 2 [1,v1] 4 10 3
v8
6
3
v[ 9 12,v5] v7
4
v4
10
v6
[10,v5]
2
[9,v5]
此时,终点标号为[12,v5],即v1—vn的最短距离为12,反向追踪 可求出最短路。
[5,v3]
v2
1
[6,v2]
v5
6 [0,v1]
2
v1
3 1
2 6 v[ 3 3,v1] 2 [1,v1] 4 10 3
v8
6
3
v[ 9 12,v5] v7
4
v4
10
v6
[10,v5]
2
[9,v5]
v1-v9的最短路为:v1-v3-v2-v5-v9,最短距离为12
•
Dijkstra算法的补充说明
① 标号过程中间结点的标号内容有明确的意义
② 同一问题可能存在多个最短路,但距离是唯一的
③ 当网络中出现负的权数时,算法失效。
2
v1
3 1
2 6 v[ 3 3,v1] 2 [1,v1] 3
v8
6
3
v9 v7
4
v4
10
v6
2
v2
6 [0,v1]
1
v5
4 10
2
v1
3 1
2 6 v[ 3 3,v1] 2 [1,v1] 3
v8
6
3
v9 v7
4
v4
10
v6
2
[5,v3]
v2
1
v5
4 10
6 [0,v1]
2
v1
3 1
2 6 v[ 3 3,v1] 2 [1,v1] 3
最短路问题
最短路问题的研究在现实生活中有哪些应用?
• • • •
管道的铺设 线路的安排 厂区的布局 设备的更新
问题:求网络中起点到其它点的一条最短路线 引例:求网络中V1-V9的最短路
v2
6
1
v5
4 10
2
v1
1
3
2
v8
6 3 6
3
v3
2
v9
v7
4
v4
10
v6
2
• •
算法:Dijkstra(狄克斯特拉) 标号法 基本思想:从起点Vs开始,逐步给每个节点V标号[dj,vi],其 中dj是起点Vs到vj的最短距离,vi为该最短路线上的前一节点。
算法:Dijkstra(狄克斯特拉) 标号法
Step1: 给起点v1标号[0,v1]
v2
6 [0,v1] v1 3 2
1
v5
4 10
2
v8
6 3 6
3
v3
2
v9 v7
4
1
v4
10
v6
2
算法:Dijkstra(狄克斯特拉) 标号法
Step2: 把顶点v分成
VA:已标号点集 VB:未标号点集
1
v2
6 [0,v1] v1 1 3 2
[0,v1]
v1 2
1
[1,v1] v3 -3
v2
•
Dijkstra算法的补充说明
① 标号过程中间结点的标号内容有明确的意义
② 同一问题可能存在多个最短路,但距离是唯一的
③ 当网络中出现负的权数时,算法失效。
④ 前面的算法描述针对有向网络图,但对于无向的网络图,只需 将step 3中的(vi, vj)改为[vi, vj],算法同样适用。
3
v3
2
v9
v7
10
4
[1,v1]
v4
v6
2
v2
6 [0,v1]
1
v5
4 10
2
v1
3 1
2
v8
6 3 6
3
v3
2
v9 v7
4
[1,v1]
v4
10
v6
2
v2
6 [0,v1]
1
v5
4 10
2
v1
3 1
2
v8
6 3 6
3
v3
2
v9 v7
4
[1,v1]
v4
10
v6
2
v2
6 [0,v1]
1
v5
4 10
Thank you
v8
6
3
v9 v7
4
v4
10
[10,v5]
v6
2
[9,v5]
[5,v3]
v2
1
[6,v2]
v5
6 [0,v1]
2
v1
3 1
2 6 v[ 3 3,v1] 2 [1,v1] 4 10 3
v8
6
3
v9 v7
4
v4
10
v6
[10,v5]
2
[9,v5]
[5,v3]
v2
1
[6,v2]
v5
6 [0,v1]
2
v1
1
v5
4 10
2
v8
6 3 6
3
v3
2
v9
v7
10
4
v4
v6
2
算法:Dijkstra(狄克斯特拉) 标号法
Step 3: 考虑所以这样的边(vi, vj)其中vi∈VA,vj∈VB,挑选其中 与起点v1距离最短(min{di + cij})的vj,对vj进行标号。
v2
6 [0,v1] v1 1 3 2
v8
6
3
v9 v7
4
v4
10
v6
2
[5,v3]
v2
1
[6,v2]
v5
6 [0,v1]
2
v1
3 1
2 6 v[ 3 3,v1] 2 [1,v1] 4 10 3
v8
6
3
v9 v7
4
v4
10
v6
2
[5,v3]
v2
1
[6,v2]
v5
6 [0,v1]
2
v1
3 1
2 6 v[ 3 3,v1] 2 [1,v1] 4 10 3
1
v5
4 10
2
v8
6 3 6
3
v3
2
v9
v7
10
4
[1,v1]
v4
v6
2
算法:Dijkstra(狄克斯特拉) 标号法
Step 4: 重复2,3步骤,直至终点vn标上[dn,vi],着dn即为v1-vn 的最短距离,反向追踪可找出最短路。
v2
6 [0,v1] v1 1 3 2
1
v5
4 10
2
v86 3 6源自v54 102
v8
6 3 6
3
v3
2
v9 v7
4
v4
10
v6
2
算法:Dijkstra(狄克斯特拉) 标号法
Step 3: 考虑所有这样的边(vi, vj)其中vi∈VA,vj∈VB,挑选其中 与起点v1距离最短(min{di + cij})的vj,对vj进行标号。
v2
6 [0,v1] v1 1 3 2
v8
6
3
v9 v7
4
v4
10
v6
2
[9,v5]
[5,v3]
v2
1
[6,v2]
v5
6 [0,v1]
2
v1
3 1
2 6 v[ 3 3,v1] 2 [1,v1] 4 10 3
v8
6
3
v9 v7
4
v4
10
v6
2
[9,v5]
[5,v3]
v2
1
[6,v2]
v5
6 [0,v1]
2
v1
3 1
2 6 v[ 3 3,v1] 2 [1,v1] 4 10 3