- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
《计量地理学》(徐建华,高等教育出版社,2005)配套实习指导
PAGE
PAGE 139
§19. 利用 Matlab 编程计算最短路径及中位点选址
1、最短路问题
两个指定顶点之间的最短路径。
例如,给出了一个连接若干个城镇的铁路网络,在这个网络的两个指定城镇间,找一条最短铁路线。
以各城镇为图 G 的顶点,两城镇间的直通铁路为图 G 相应两顶点间的边, 得图G 。对G 的每一边e ,赋以一个实数w(e) —直通铁路的长度,称为e 的权, 得到赋权图G 。G 的子图的权是指子图的各边的权和。问题就是求赋权图 G 中
指定的两个顶点u , v 间的具最小权的轨。这条轨叫做u , v 间的最短路,它的权
0 0 0 0
叫做u , v 间的距离,亦记作d (u , v ) 。
0 0 0 0
求最短路已有成熟的算法:迪克斯特拉( Dijkstra)算法,其基本思想是按
距u 从近到远为顺序,依次求得 u
0 0
到G 的各顶点的最短路和距离,直至 v (或
0
直至G 的所有顶点),算法结束。为避免重复并保留每一步的计算信息,采用了标号算法。下面是该算法。
(i) 令l(u ) ? 0,对v ? u ,令l(v) ? ? , S ? {u } , i ? 0 。
0 0 0 0
(ii) 对每个v ? S ( S ? V \ S ),用
i i i
min{l(v), l(u) ? w(uv)}
u?Si
代替 l(v) 。计算 min{l(v)} ,把达到这个最小值的一个顶点记为 u
v?Si
,令
i?1
? 。S ? S {
? 。
i ?1 i i ?1
(iii). 若i ?| V | ?1,停止;若i ?| V | ?1 ,用i ? 1 代替i ,转(ii)。
0算法结束时,从u 到各顶点v 的距离由v 的最后一次的标号l(v) 给出。在v 进
0
入Si 之前的标号l(v) 叫 T 标号,v 进入Si 时的标号l(v) 叫 P 标号。算法就是不断修改各项点的 T 标号,直至获得 P 标号。若在算法运行过程中,将每一顶点获
0得 P 标号所由来的边在图上标明,则算法结束时, u
0
至各项点的最短路也在图
上标示出来了。
例 1: 某公司在六个城市c
, c , , c
1?2 6
1
?
中有分公司,从ci
到c j 的直接航程票
价记在下述矩阵的(i, j) 位置上。( ? 表示无直接航路),请帮助该公司设计一张
1城市c
1
到其它城市间的票价最便宜的路线图。
? 0
? 0
50
?
40
25
?50
0
15
20
?
? ?
15
0
10
20
?40
20
10
0
10
?25
?
20
10
0
?
?10
25
?
25
55
?? 25?
?
? ?
?? 25?
?
55?
0?
0
?
用矩阵a
n?n
( n 为顶点个数)存放各边权的邻接矩阵,行向量 pb 、index 、
1
index 、d 分别用来存放 P 标号信息、标号顶点顺序、标号顶点索引、最短通路
2
的值。其中分量
pb(i) ?
?1 当第i顶点已标号
;?
;
?0 当第i顶点未标号
index2 (i) 存放始点到第i 点最短通路中第i 顶点前一顶点的序号;
d (i) 存放由始点到第i 点最短通路的值。
求第一个城市到其它城市的最短路径的 Matlab 程序如下:
clear; clc; M=10000;
a(1,:)=[0,50,M,40,25,10];
a(2,:)=[zeros(1,2),15,20,M,25];
a(3,:)=[zeros(1,3),10,20,M];
a(4,:)=[zeros(1,4),10,25];
a(5,:)=[zeros(1,5),55];
a(6,:)=zeros(1,6); a=a+a;
pb(1:length(a))=0;pb(1)=1;d(1:length(a))=M;d(1)=0;temp=1; while sum(pb)length(a)
tb=find(pb==0); d(tb)=min(d(tb),d(temp)+a(temp,tb)); tmpb=find(d(tb)==min(d(tb))); temp=tb(tmpb(1));
pb(temp)=1;
end d
运行输出,第一个城市到其它城市的最短路径长度,即:
d =
0 35 45 35 25 10
2、选址问题-以中位点选址为例
中位点选址问题的质量判据为:使最佳选址为止所在的定点到网络图中其他顶点的最短路径距离的总和(或者以各个顶点的载荷加权求和)达到最小。
例2:某县下属七个乡镇,各乡镇所拥有的人口数a(vi)(i=1,2,…,7), 以及各乡镇之
文档评论(0)