网站大量收购独家精品文档,联系QQ:2885784924

最短路问题(第一次作业)史晓康29.doc

  1. 1、本文档共6页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
最短路问题(第一次作业)史晓康29

作业: 1、某公司在六个城市中有分公司,从到的直接航程票价记在下述矩阵的位置上。(表示无直接航路),请帮助该公司设计一张城市到其它城市间的票价最便宜的路线图。 解: clear,clc w=[ 0 50 inf 40 25 10 50 0 15 20 inf 25 inf 15 0 10 20 inf 40 20 10 0 10 25 25 inf 20 10 0 55 10 25 inf 25 55 0 ]; v0=1; dijkstra(w,v0) 起点为第1个顶点,终点为第1个顶点的最短路径为1; 路径长度为0 起点为第1个顶点,终点为第2个顶点的最短路径为1 6 2; 路径长度为35 起点为第1个顶点,终点为第3个顶点的最短路径为1 5 3; 路径长度为45 起点为第1个顶点,终点为第4个顶点的最短路径为1 6 4; 路径长度为35 起点为第1个顶点,终点为第5个顶点的最短路径为1 5; 路径长度为25 起点为第1个顶点,终点为第6个顶点的最短路径为1 6; 路径长度为10 2、求下图中第一节点到其它节点的最短距离,并用矩阵表示。 ------------------------------------------------------------------------ 参考例题: 求v1到其余各点的最短路径。 解:赋权矩阵为: 调用附件中dijkstra算法程序,可以得到如下结果: 计算过程为: 建立一个main1.m文件,输入一下matlab语句: clear,clc w=[0 3 inf inf inf inf inf 3 0 2 inf 18 2.5 inf inf 2 0 6 2 inf inf inf inf 6 0 3 inf inf inf 18 2 3 0 4 inf inf 2.5 inf inf 4 0 1.5 inf inf inf inf inf 1.5 0 ] v0=1; dijkstra(w,v0) 然后保存并运行。 ----------------------------------------------------------------------- 附件1: ============================================================= 说明:这是dijkstra最短路算法程序,可以计算指定点到其余个点的最短路径和距离。使用时只需写好赋权矩阵和起点,调用该程序即可。 %dijkstra最短路算法,第v0顶点到其余顶点的最短路,w是赋权矩阵 function dijkstra(w,v0) %w的行数或列数是顶点的个数 n=size(w,1);%顶点个数 v=v0; L=w(v,:); %当前起点到各个点的距离,初始为直接距离 z=ones(1,n)*v;%当前距离时点的父顶点,初始都为v;计算完成后的值的含义是:z(i)=m,表示第i个顶点的父亲点是第m个顶点 s(1)=v;%将起点v加入到最短路径中 u=s(1);%从起点v开始,下一个点初始为v k=1; while kn %k为s中的最后一个顶点序号 % 更新 L(v) 和 z(v) for t=1:n %实现遍历V-s中的点 if L(t)L(u)+w(u,t) %起点到第i个顶点的路径起点到第u个顶点的路径+第u个顶点到第i个顶点的路径 L(t)=L(u)+w(u,t); %改变起点到第i个顶点的路径值 z(t)=u; %将第i个顶点的父顶点设为u,即在最短路径中第i个顶点的前一个顶点暂时是u.否则暂时是起点v end end %求v LL=L; LL(s)=inf; %在V中找出所有被选择过的顶点,即在V中找出s中的点,让起点到这些点的路径不再参与比较 [Lv,v]=min(LL);%由于LL(i)表示的是从起点开始到第i个顶点的路径,所以这个命令是求从u0开始直接到各个顶点的最短路径 s(k+1)=v;%将v加入到被选过的点的集合中 k=k+1; u=s(k);%使u成为当前插入点 end for t=1:n %遍历每一个点,找到起点到该点的最短路径 r=[];a=t; while a~=v0 r=[a,r]; a=z(a); end r=[v0 r]; display([起点为第,num2str(v0),个顶点,终点为第,num2s

文档评论(0)

2017ll + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档