- 1、本文档共6页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 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
您可能关注的文档
- 快逸报表操作积累.docx
- 怎样科学养殖甲鱼.doc
- 怎样辨识一次设备和二次设备.docx
- 思路算工程量.doc
- 思修答辩论文食品安全.docx
- 必修2[遗传与进化]选择题(老师).doc
- 情境五解热镇痛药和非甾体抗炎药doc.doc
- 悬挑式钢管脚手架施工方0921.doc
- 恢复本地安全策略.doc
- 惨烈商战2例.docx
- 2025年山西阳泉市城区高三下学期考前物理适应性演练(二)试题.docx
- 2025年山西阳泉市城区高三一模物理试卷及答案.docx
- 审计单位新人工作总结范文.pdf
- 2025年湖南省益阳市单招职业倾向性测试题库附答案.docx
- 2025年山西阳泉市平定县高三一模物理试卷及答案.docx
- 2025年山西长治市黎城县高三二模物理试卷及答案.docx
- 2025年吉林省四平市单招职业适应性考试题库及答案1套.docx
- 专题10二次函数-2025年中考数学真题分项汇编(第1期)(原卷版).docx
- 2025年山西长治市黎城县高三下学期考前物理适应性演练(二)试题.docx
- 2025年广东省云浮市罗定市高三下学期物理基础题、中档题型强化训练.docx
文档评论(0)