§62最短路问题.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
§62最短路问题

§6.2最短路问题 2.1 两个指定顶点之间的最短路径 问题如下:给出了一个连接若干个城镇的铁路网络,在这个网络的两个指定城镇间,找一条最短铁路线。 以各城镇为图的顶点,两城镇间的直通铁路为图相应两顶点间的边,得图。对的每一边,赋以一个实数—直通铁路的长度,称为的权,得到赋权图。的子图的权是指子图的各边的权和。问题就是求赋权图中指定的两个顶点间的具最小权的轨。这条轨叫做间的最短路,它的权叫做间的距离,亦记作。 求最短路已有成熟的算法:迪克斯特拉(Dijkstra)算法,其基本思想是按距从近到远为顺序,依次求得到的各顶点的最短路和距离,直至(或直至的所有顶点),算法结束。为避免重复并保留每一步的计算信息,采用了标号算法。下面是该算法。 i 令,对,令,,。 ii 对每个(),用 代替。计算,把达到这个最小值的一个顶点记为,令。 iii . 若,停止;若,用代替,转 ii 。 算法结束时,从到各顶点的距离由的最后一次的标号给出。在进入之前的标号叫T标号,进入时的标号叫P标号。算法就是不断修改各项点的T标号,直至获得P标号。若在算法运行过程中,将每一顶点获得P标号所由来的边在图上标明,则算法结束时,至各项点的最短路也在图上标示出来了。 例9 某公司在六个城市中有分公司,从到的直接航程票价记在下述矩阵的位置上。(表示无直接航路),请帮助该公司设计一张城市到其它城市间的票价最便宜的路线图。 用矩阵(为顶点个数)存放各边权的邻接矩阵,行向量、、、分别用来存放标号信息、标号顶点顺序、标号顶点索引、最短通路的值。其中分量 ; 存放始点到第点最短通路中第顶点前一顶点的序号; 存放由始点到第点最短通路的值。 求第一个城市到其它城市的最短路径的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;index1 1;index2 ones 1,length a ; 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; index1 [index1,temp]; index index1 find d index1 d temp -a temp,index1 ; if length index 2 index index 1 ; end index2 temp index; end d, index1, index2 2.2 每对顶点之间的最短路径 计算赋权图中各对顶点之间最短路径,显然可以调用Dijkstra算法。具体方法是:每次以不同的顶点作为起点,用Dijkstra算法求出从该起点到其余顶点的最短路径,反复执行次这样的操作,就可得到从每一个顶点到其它顶点的最短路径。这种算法的时间复杂度为。第二种解决这一问题的方法是由Floyd R W提出的算法,称之为Floyd算法。 假设图权的邻接矩阵为, 来存放各边长度,其中: ; 之间没有边,在程序中以各边都不可能达到的充分大的数代替; 是之间边的长度,。 对于无向图,是对称矩阵,。 Floyd算法的基本思想是:递推产生一个矩阵序列,其中表示从顶点到顶点的路径上所经过的顶点序号不大于的最短路径长度。 计算时用迭代公式: 是迭代次数,。 最后,当时,即是各顶点之间的最短通路值。 例10 用Floyd算法求解例1。 矩阵path用来存放每对顶点之间最短路径上所经过的顶点的序号。Floyd算法的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 ; b a+a;path zeros length b ; for k 1:6 for i 1:6 for j 1:6 if b i,j b i,k

文档评论(0)

kabudou + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档