用matlab实现寻找最短路.docxVIP

  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文档。上传文档
查看更多
用matlab实现寻找最短路

用matlab寻找赋权图中的最短路中的应用引言图论是应用数学的一个分支,它的概念和结果来源都非常广泛,最早起源于一些数学游戏的难题研究,如欧拉所解决的格尼斯堡七桥问题,以及在民间广泛流传的一些游戏的难题,如迷宫问题,博弈问题等。这些古老的难题,吸引了很多学者的注意。1847年,图论应用于分析电路网络,这是它最早应用于工程科学,以后随着科学的发展,图论在解决运筹学,网络理论,信息论,控制论,博弈论以及计算机科学等各个领域的问题时,发挥出很大的作用。在实践中,图论已成为解决自然科学,工程技术,社会科学,军事等领域中许多问题的有力工具之一。最短路问题是图论理论中的经典问题,寻找最短路径就是在指定网络中两节点间找一条距离最小的路。2 最短路2.1 最短路的定义(short-path problem)对最短路问题的研究早在上个世纪60年代以前就卓有成效了,其中对赋权图的有效算法是由荷兰著名计算机专家E.W.Dijkstra在1959年首次提出的,该算法能够解决两指定点间的最短路,也可以求解图G中一特定点到其它各顶点的最短路。后来海斯在Dijkstra算法的基础之上提出了海斯算法。但这两种算法都不能解决含有负权的图的最短路问题。因此由Ford提出了Ford算法,它能有效地解决含有负权的最短路问题。但在现实生活中,我们所遇到的问题大都不含负权,所以我们在的情况下选择Dijkstra算法。若网络中的每条边都有一个数值(长度、成本、时间等),则找出两节点(通常是源节点和阱节点)之间总权和最小的路径就是最短路问题。最短路问题是网络理论解决的典型问题之一,它不仅可以直接应用于解决生产实际的许多问题,如管路铺设、线路安装、厂区布局和设备更新等,而且经常被作为一个基本的工具,用于解决其他的做优化问题。定义1:若图G=G(V,E)中个边[vi,vj]都赋有一个实数wij ,则称这样的图G为赋权图,wij 称为边[vi,vj]上的权。定义2:给定一个赋权有向图,即给一个有向图D=(V,A),对每一个弧a=(vi,vj),相应地有权w(a)=wij,又给定D中的两个顶点vs,vt。设P是D中从vs到vt的一条路,定义路P的权是P中所有弧的权之和,记为w(P)。最短路问题就是要在所有从vs到vt 的路中,求一条权最小的路,即求一条从vs到vt 的路P0 ,使w(P0)=w(P)式中对D中所有从vs到vt 的路P最小,称P0 是从vs到vt 的最短路。2.2 最短路问题算法的基本思想及其基本步骤在求解网络图上节点间最短路径的方法中,目前国内外一致公认的比较好的算法有Dijkstra和Floyd算法。这两种算法,网络被抽象为一个图论中定义的有向图或无向图,并利用图的节点邻接矩阵记录点的关联信息。在进行图的遍历搜索最短路径时,以该矩阵为基础不断进行目标值的最小性判别,知道获得最后的优化路径。鉴于课本使用Dijkstra算法,下面用Floyd算法进行计算:设A=(a)n*n 为赋权图G=(V,E,F)的矩阵,当ViVj∈E时,aij=F(vi,vj),否则,取aij =0,aij =+∞(i≠j),dij表示从vi到vj 的点的距离,rij 表示从vi到vj 的点的最短路中的一个点的编号。赋初值。对所有i,j,dij= aij,rij=j,k=1,转向②;更新dij,rij,对所有i,j,若dik + dkj dij,则令dij= dik + dkj,rij=k,转向;终止判断。若dij0,则存在一条含有顶点vi的负回路,终止;或者k=n,终止;否则,另k=k+1,转向②。最短路线可由rij得到。2.3 用matlab程序实现上述算法编写程序函数程序如下:function f=shortpath(n,A)clear;n=input(请输入矩阵的阶n=);A=input(请输入赋权图对应的n阶矩阵A=); % 顶点之间不通时,用inf表示(MATLAB中,inf表示无穷)D=A;%赋初值for(i=1:n)for(j=1:n) R(i,j)=j;end;end%赋路径初值for(k=1:n)for(i=1:n)for(j=1:n)if(D(i,k)+D(k,j)D(i,j)) D(i,j)=D(i,k)+D(k,j); %更新dij R(i,j)=k;%更新rijend;end;end k %显示迭代步数 D %显示每步迭代后的路长 R %显示每步迭代后的路径 pd=0;for(i=1:n)%含有负权if(D(i,j)0) pd=1;break;end;end%存在一条含有顶点的vi的负回路if(pd)break;end%存在一条负回路,终止程序en

文档评论(0)

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

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

版权声明书
用户编号:5024214302000003

1亿VIP精品文档

相关文档