第五章地理信息系统-路径遍历与最短路径
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
首先从v1开始,给每一个顶点标一个数,称为标 号。这些标号,又进一步区分为T标号和P标号两种类
型。其中,每一个顶点的T标号表示从起点v1到该点的 最短路径长度的上界,这种标号为临时标号;P标号表
示从v1到该点的最短路长度,这种标号为固定标号。 在最短路径计算过程中,对于已经得到P标号的顶
点,不再改变其标号;对于凡是没有标上P标号的顶点,
物流信息管理
大连海事大学
第五章 地理信息系统
路径遍历与最短路径
一、路径遍历 1. 深度优先遍历 2. 广度优先遍历
二、最短路径 1. 数学模型 2. 标号法 3. 程序流程
一、路径遍历
1.深度优先遍历
(1) 首 先 访 问 顶 点 i , 并 将 其 访 问 标 记 置 为 访 问 过 , 即 visited(i) =1; (2) 然后搜索与顶点i有边相连的下一个顶点j,若j未被 访问过,则访问它,并将j的访问标记置为访问过, visited(j)=1,然后从j开始重复此过程,若j已访问,再 看与i有边相连的其它顶点; (3) 若与i有边相连的顶点都被访问过,则退回到前一 个访问顶点并重复刚才过程,直到图中所有顶点都被 访问完为止。
1 Initialization:
2 S = {u}
3 for all nodes v
4 if v adjacent to u then
5
D(v) = c(u,v)
6 else D(v) = ∞
7
8 Loop
9 find w not in S with the smallest D(w)
10 add w to S
以上3类问题,都可以抽象为同一类问题,即 赋权图上的最短路径问题。
不同意义下的距离都可以被抽象为网络图中 边的权值。
权——这种权值既可以代表“纯距离 ”,又 可以代表“经济距离 ”,也可以代表“时间距 离 ”。
(二)最短路径的算法
标号法 1959年E.W.Dijkstar 提出的标号法是最短路径
例如,某公司在10大港口C1,C2,…,C10 设有货栈,从Ci到Cj之间的直接航运价格,是 由市场动态决定的。如果两个港口之间无直接 通航路线,则通过第三个港口转运。那么,各 个港口之间最廉价的货运线路是什么?
“时间”意义上的最短路径 例如,某家经营公司有一批货物急需从一个
城市运往另一个城市,那么,在由公路、铁路、 河流航运、航空运输等4种运输方式和各个运输线 路所构成的交通网络中,究竟选择怎样的运输路 线最节省时间?
11 update D(v) for all v adjacent to w and not in S:
12 D(v) = min{D(v), D(w) + c(w,v)}
13 until all nodes in S
15
标号法例子
标号法例子
最短路径生成树
v
2
y
3
1
1
x
4
u
21
5
t
w4
3
s
节点 u v zw y x s t z
Next
For j=1 to NUMOFITEMS(w) Call BreadthFirstSearch( w(j) )
Next End Sub
二、最短路径问题
(一)最短路径的含义
二、最短路径问题
(一)最短路径的含义
“纯距离”意义上的最短路径 例如,需要运送一批物资从一个城市到另
一个城市,选择什么样的运输路线距离最短? “经济距离”意义上的最短路径
所有这样的点 vj vi , vj E,而且vj的标号是T标号
将其T标号修改为:min[T(vj),P(vi)+wij]。
v j0
② 若G中没有T标号,则停止。否则,把点 的T标号修改为P标号,然后再转入①。
其中,v j0 满足 T (v j0 ) min T (v j )
标号法算法描述
先给它一个T标号;算法的每一步就是把顶点的T标号
逐步修改,将其变为P标号。
那么,最多经过k-1步,就可以求得到从起点v1到 每一个顶点的最短路径及其长度。
标号法具体计算步骤
开始,先给v1标上P标号P(v1)= 0,其余各点 标上T标号T(vj)=+∞(j≠1)。
① 如果刚刚得到P标号的点是vi,那么,对于
问题最好的求解方法 。 标号法优点
不仅可以求出起点到终点的最短路径及其长度 ,而且可以求出起点到其他任何一个顶点的最短路 径及其长度;同时适用于求解有向图或无向图上的 最短路径问题。.
标号法的基本思想
设G是一个赋权有向图,即对于图中的每一条边, 都赋予了一个权值。在图G中指定两个顶点,确定为起 点和终点,不妨设v1为起点,vk为终点。
广度优先遍历算法描述
Call visit(s) visited(s) = 1
Sub BreadthFirstSearch(v as Integer) ‘从v出发广度优先遍历图g
For i=1 to NUMOFADJ(v) w(i) = NEXTADJ(v) ‘找下一邻接点 If visited( w(i) ) = 0 Then Call visit( w(i) ) visited( w(i) ) = 1 End If
Fra Baidu bibliotek
深度优先遍历算法描述
Sub DeepthFirstSearch(v as Integer) ‘从v出发深度优先遍历图g Call visit(v) visited(v) = 1 w=FIRSTADJ(v) ‘w为v的邻接点 Do while visited(w)=0 ‘当邻接点未访问 Call DeepthFirstSearch(w) w=NEXTADJ(v) ‘找下一邻接点 Loop
End Sub
2.广度优先遍历
广度优先搜索遍历类似于树的按层次遍历。设图G的初 态是所有顶点均未访问,在G 中任选一顶点i作为初始点, 则广度优先搜索的基本思想是: (1) 首先访问顶点i,并将其访问标志置为已被访问,即 visited(i)=1; (2) 接着依次访问与顶点i有边相连的所有顶点W1, W2,…,Wt; (3) 然后再按顺序访问与W1,W2,…,Wt有边相连又 未曾访问过的顶点; 依此类推,直到图中所有顶点都被访问完为止 。
前溯节点 u u u v w w x y
型。其中,每一个顶点的T标号表示从起点v1到该点的 最短路径长度的上界,这种标号为临时标号;P标号表
示从v1到该点的最短路长度,这种标号为固定标号。 在最短路径计算过程中,对于已经得到P标号的顶
点,不再改变其标号;对于凡是没有标上P标号的顶点,
物流信息管理
大连海事大学
第五章 地理信息系统
路径遍历与最短路径
一、路径遍历 1. 深度优先遍历 2. 广度优先遍历
二、最短路径 1. 数学模型 2. 标号法 3. 程序流程
一、路径遍历
1.深度优先遍历
(1) 首 先 访 问 顶 点 i , 并 将 其 访 问 标 记 置 为 访 问 过 , 即 visited(i) =1; (2) 然后搜索与顶点i有边相连的下一个顶点j,若j未被 访问过,则访问它,并将j的访问标记置为访问过, visited(j)=1,然后从j开始重复此过程,若j已访问,再 看与i有边相连的其它顶点; (3) 若与i有边相连的顶点都被访问过,则退回到前一 个访问顶点并重复刚才过程,直到图中所有顶点都被 访问完为止。
1 Initialization:
2 S = {u}
3 for all nodes v
4 if v adjacent to u then
5
D(v) = c(u,v)
6 else D(v) = ∞
7
8 Loop
9 find w not in S with the smallest D(w)
10 add w to S
以上3类问题,都可以抽象为同一类问题,即 赋权图上的最短路径问题。
不同意义下的距离都可以被抽象为网络图中 边的权值。
权——这种权值既可以代表“纯距离 ”,又 可以代表“经济距离 ”,也可以代表“时间距 离 ”。
(二)最短路径的算法
标号法 1959年E.W.Dijkstar 提出的标号法是最短路径
例如,某公司在10大港口C1,C2,…,C10 设有货栈,从Ci到Cj之间的直接航运价格,是 由市场动态决定的。如果两个港口之间无直接 通航路线,则通过第三个港口转运。那么,各 个港口之间最廉价的货运线路是什么?
“时间”意义上的最短路径 例如,某家经营公司有一批货物急需从一个
城市运往另一个城市,那么,在由公路、铁路、 河流航运、航空运输等4种运输方式和各个运输线 路所构成的交通网络中,究竟选择怎样的运输路 线最节省时间?
11 update D(v) for all v adjacent to w and not in S:
12 D(v) = min{D(v), D(w) + c(w,v)}
13 until all nodes in S
15
标号法例子
标号法例子
最短路径生成树
v
2
y
3
1
1
x
4
u
21
5
t
w4
3
s
节点 u v zw y x s t z
Next
For j=1 to NUMOFITEMS(w) Call BreadthFirstSearch( w(j) )
Next End Sub
二、最短路径问题
(一)最短路径的含义
二、最短路径问题
(一)最短路径的含义
“纯距离”意义上的最短路径 例如,需要运送一批物资从一个城市到另
一个城市,选择什么样的运输路线距离最短? “经济距离”意义上的最短路径
所有这样的点 vj vi , vj E,而且vj的标号是T标号
将其T标号修改为:min[T(vj),P(vi)+wij]。
v j0
② 若G中没有T标号,则停止。否则,把点 的T标号修改为P标号,然后再转入①。
其中,v j0 满足 T (v j0 ) min T (v j )
标号法算法描述
先给它一个T标号;算法的每一步就是把顶点的T标号
逐步修改,将其变为P标号。
那么,最多经过k-1步,就可以求得到从起点v1到 每一个顶点的最短路径及其长度。
标号法具体计算步骤
开始,先给v1标上P标号P(v1)= 0,其余各点 标上T标号T(vj)=+∞(j≠1)。
① 如果刚刚得到P标号的点是vi,那么,对于
问题最好的求解方法 。 标号法优点
不仅可以求出起点到终点的最短路径及其长度 ,而且可以求出起点到其他任何一个顶点的最短路 径及其长度;同时适用于求解有向图或无向图上的 最短路径问题。.
标号法的基本思想
设G是一个赋权有向图,即对于图中的每一条边, 都赋予了一个权值。在图G中指定两个顶点,确定为起 点和终点,不妨设v1为起点,vk为终点。
广度优先遍历算法描述
Call visit(s) visited(s) = 1
Sub BreadthFirstSearch(v as Integer) ‘从v出发广度优先遍历图g
For i=1 to NUMOFADJ(v) w(i) = NEXTADJ(v) ‘找下一邻接点 If visited( w(i) ) = 0 Then Call visit( w(i) ) visited( w(i) ) = 1 End If
Fra Baidu bibliotek
深度优先遍历算法描述
Sub DeepthFirstSearch(v as Integer) ‘从v出发深度优先遍历图g Call visit(v) visited(v) = 1 w=FIRSTADJ(v) ‘w为v的邻接点 Do while visited(w)=0 ‘当邻接点未访问 Call DeepthFirstSearch(w) w=NEXTADJ(v) ‘找下一邻接点 Loop
End Sub
2.广度优先遍历
广度优先搜索遍历类似于树的按层次遍历。设图G的初 态是所有顶点均未访问,在G 中任选一顶点i作为初始点, 则广度优先搜索的基本思想是: (1) 首先访问顶点i,并将其访问标志置为已被访问,即 visited(i)=1; (2) 接着依次访问与顶点i有边相连的所有顶点W1, W2,…,Wt; (3) 然后再按顺序访问与W1,W2,…,Wt有边相连又 未曾访问过的顶点; 依此类推,直到图中所有顶点都被访问完为止 。
前溯节点 u u u v w w x y