基于MATLAB的Dijkstra算法实现及案例分析

摘要:为研究两地点之间距离(或耗时)最短路线规划,采用MATLAB编程的方法来实现,并利用Floyd算法记录距离(或耗时)最短路线。在不考虑各种影响因素的情况下,以随机小样本数据为例进行演示,求得由起点到目的地的最短耗时路径和耗时时长。
#1. 经典Dijkstra算法的基本思想及数学模型
##1.1 基本思想

Dijkstra算法的基本思想是从某一点(Vs)开始,依次向外探寻最短路径。过程中,对于每一个点,都要记下一个相应的数(即该点的标号),若此数表示从起点Vs到该点的最短路径的权值,则用P标号,反之表示从起点Vs到该点的最短路径的权值上界,即用T标号,算法的每一步就是修改T标号的点为P标号的点,使赋权有向图D中的点全部转化为P标号的点,至多经过p-1步,方可求出从起点Vs到终点的最短路径。

##1.2 代码

function mydijkstra(A,sb,db)
%A(输入量)表示邻接矩阵,sb—起点的标号,db—终点的标号
%B(输出量)表示所求最短耗时时长矩阵,dist—最短路的耗时时长, mypath—最短路的路径
m=length(A;
for i=2:mfor j=1:(i-1)A(i,j)=A(j,i);end
end
a=A;
for k=1:(m-1)b=[1:(k-1),(k+1):m];kk=length(b);a_id=k;b1=[(k+1):m];kk1=length(b1);while kk>0for j=1:kk1te=A(k,a_id)+A(a_id,b1(j));if te<A(k,b1(j))A(k,b1(j))=te;endendmiid=1;for j=2:kkif A(k,b(j))<A(k,b(miid))miid=j;endenda_id=b(miid);b=[b(1:(miid-1)),b((miid+1:kk))];kk=length(b);if a_id>kmiid1=find(b1==a_id);b1=[b1(1:(miid1-1)),b1((miid1+1):kk1)];kk1=length(b1);endendfor j=(k+1):mA(j,k)=A(k,j);endendm=size(a,1);
path=zeros(m);for k=1:mfor i=1:mfor j=1:mif a(i,j)>a(i,k)+a(k,j)a(i,j)=a(i,k)+a(k,j);path(i,j)=k;endendendenddist=a(sb,db);parent=path(sb,:);%从起点sb到终点db的最短路上各顶点的前驱顶点parent(parent==0)=sb;%path中的分量为0,表示该顶点的前驱是起点mypath=db; t=db;while t~=sbp=parent(t); mypath=[p,mypath];t=p;endfprintf('最短路距离矩阵:B\n');B=A,dist,mypath

#2.案例——两地点之间自主驾驶最省时路线选择
##2. 1绘制公路网络拓扑结构
为了研究两地点之间自主驾驶最省时路线,随机编写时间长度,如表1所示,并绘制出由点和边组成的公路网络静态拓扑结构,如图1所示。图中节点V1为出发点所在地,设定节数量为6,并计算由V1到V6的最短耗时和最短耗时路径。

在这里插入图片描述
在这里插入图片描述

##2.2 Dijkstra算法的MATLAB实现结果

Dijkstra 算法的MATLAB实现根据上文绘制的公路网络静态拓扑结构关系以及图中所标的道路实际耗时长度,运用MATLAB 编程软件来实现Dijkstra最短路径算法,并利用Floyd算法记录最短耗时线路。由软件可求得,由V1到任意一点的最短耗时路径和耗时时长,如表2所示。

在这里插入图片描述
在天气、路况等各种因素的影响下,从V1到V6点的最省时路线为:V1,V3,V6,时间为16分钟,具体如图2所示。
在这里插入图片描述

参考文献
[1] 曾庆福,王孟平.基于MATLAB编程Dijkstra算法的消防救援最佳路线研究[J].武警学院学报,2018,34(06):9-13.
[2] 曹旭. 旅游线路优化设计研究[D]. 西北民族大学, 2012.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/430411.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

面试题19:二叉树镜像

递归方法非常简单&#xff1a; 1 void MirrorRecursively(BinaryTreeNode *pNode)2 {3 if((pNode NULL) || (pNode->m_pLeft NULL && pNode->m_pRight))4 return;5 6 BinaryTreeNode *pTemp pNode->m_pLeft;7 pNode->m_pLeft pNod…

win10共享打印机怎么设置_关于win10网络共享,选择“启用文件和打印机共享”之后,无法保存设置的解决办法...

写个流水账&#xff0c;把我解决这个问题的前因后果记录一下&#xff0c;供遇到相同问题的同学参考之用&#xff0c;希望能有点启发。这个问题的来源&#xff0c;是我想利用客厅的小米盒子&#xff0c;访问同一个路由器局域网之下的pc&#xff0c;直接访问共享文件的方式&#…

MATLAB中BP神经网络用于回归拟合算法实现(另附GRNN代码)

BP神经网络&#xff1a;是1986年由Rumelhart和McClelland为首的科学家提出的概念&#xff0c;是一种按照误差逆向传播算法训练的多层前馈神经网络&#xff0c;是目前应用最广泛的神经网络。神经网络是把生活中的常见情节推广到计算仿真的范畴&#xff0c;这样的启发式算法还有许…

前端性能优化知识,包括css和js

作者&#xff1a;野次链接&#xff1a;http://www.zhihu.com/question/33032042/answer/95948831来源&#xff1a;知乎著作权归作者所有。商业转载请联系作者获得授权&#xff0c;非商业转载请注明出处。 1. 减少HTTP请求次数 尽量合并图片、CSS、JS。比如加载一个页面&#xf…

快速理解编程结构_为什么系统编程全都用英文而不用中文?听完专家的解释恍然大悟!...

全球博弈(quanqiuboyi)——不一样的观点&#xff0c;不一样的解读&#xff0c;8000万人订阅的超级微信大号。不关注时事&#xff0c;你将会被这个世界抛弃&#xff0c;点击标题下蓝字“全球博弈”关注&#xff0c;我们将为您提供有价值、有意思的时事解读。人类走进科技发展的道…

用了十年的昵称badboy_怎样用5秒钟看清一对夫妻的真实感情状况?

“只要一分钟&#xff0c;我就能看清一对夫妻感情的状况。”从事情感咨询几十年的行业前辈告诉我&#xff0c;她的诀窍就是——听他们之间如何称呼对方。“大部分情侣在恋爱时都会给对方起一个专属的爱称&#xff0c;比如&#xff1a;小白猪、大宝宝之类的&#xff0c;总之很亲…

MATLAB—经纬度坐标转换为平面坐标

原理示意图&#xff1a; Mercator投影变换示意图 2. 公式: XY平面被当作Mercator投影平面&#xff0c;Y轴和X轴原点分别设为0纬度和0经度。通过如下公式将地理坐标变换到Mercator投影平面。由于标准电子海图/航道图使用WGS84坐标系&#xff0c;本文使用WGS84参数进行变换。投影…

java.util.TimeZone 新加方法 getTimeZone(ZoneId zoneId) 导致的问题

最近接受的项目中用spring配置了一个TimeZone对象&#xff1a; <bean id "timeZone4Job" class"java.util.TimeZone" factory-method"getTimeZone"><constructor-arg value"GMT8:00"/> </bean> 以前是运行在 1.7 中…

io密集型和cpu密集型_和小胖一起理解CPU负载和利用率

作者&#xff1a;小胖前言凌晨一点&#xff0c;正整着炸鸡的小胖&#xff0c;微信一呼“你的服务器CPU持续超载 … “麻溜的连上服务器&#xff0c;先把CPU负载摁下来。仔细一想&#xff0c;最近1分钟平均负载很大&#xff0c;但CPU利用率却≤30%&#xff0c;不经陷入了深思&am…

gui显示文本动态框

软件文本框&#xff0c;显示一些希望被阅读的文本&#xff1b; 包含main函数(kuang)&#xff0c;gui作为子函数&#xff0c;以及必要的txt文件。 直接运行kuang函数即可。时间0.5秒内。 可以顺序显示希望输入的内容&#xff0c;并保存记录&#xff0c;如下 也可以每次只显示新…

生成六位验证码python代码

生成六位验证码python代码 import randomdef Verifi_code():code []for i in range(6):if i random.randint(1,5):code.append(str(random.randint(1,5)))else:temp random.randint(65,90)code.append(chr(temp))a .join(code)return ab Verifi_code()print b转载于:https…

redis5 外部不能连接_【硬见小百科】PCB连接的方法

PCB是电子产品的基本元器件&#xff0c;任何电子产品都需要PCB才能制成。那么&#xff0c;PCB在电子产品之中&#xff0c;必须要与其他器件相互连接在一起&#xff0c;这就是PCB的互连。总的来说&#xff0c;PCB的连接有三个方面&#xff1a;芯片到PCB、PCB内部、PCB与外部器件…

最小费用最大流问题

最小费用最大流问题 解决如下最小费用最大流问题。 以前的资源由于matlab版本问题等已不适用。现在做出修改&#xff0c;适用于matlab2014a以后的版本。 注意&#xff0c;数据格式按代码中的例子的格式&#xff0c;否则需要修改代码。 查了很多资源发现用MATLAB操作的好用的不多…

Web应用中request获取各种获取path或URI,URL的方法

Web应用中有各种获取path或URI&#xff0c;URL的方法&#xff0c;假设网页访问地址: http://localhost:8080/tradeload/TestServlet Web应用context: /tradeload 各路径鉴定如下&#xff1a; request.getContextPath() /tradeload request.getScheme() "://" requ…

windows7无人值守应答文件.rar_数智化赋能人力共享运营,人力管理走向“无人值守”...

关键词&#xff1a;人力共享&#xff0c;HR&#xff0c;数智化&#xff0c;用友&#xff0c;NC Cloud&#xff0c;无人值守人力共享是近几年人力资源从业者持续关注的热点话题。无论是从效率提升、体验改进&#xff0c;还是助力人力资源角色转型&#xff0c;对人力共享能带来的…

android 多线程断点续传下载 三

android 多线程断点续传下载 三转载于:https://www.cnblogs.com/zhujiabin/p/5660093.html

Matlab基本初等函数大全

Matlab基本初等函数大全 方便查阅&#xff0c;适合基础学习者使用。 链接中是完整版 完整版初等函数大全 1、特殊变量与常数 ans 计算结果的变量名 computer 确定运行的计算机 eps 浮点相对精度 Inf 无穷大 I 虚数单位 inputname 输入参数名 NaN 非数 nargin 输入参数个数 narg…

iphone彻底删除照片如何恢复_手机删除的照片如何恢复?OPPO最新照片恢复

手机删除的照片如何恢复&#xff1f;小编给大家带来了OPPO最新照片恢复方法&#xff0c;可谓是专属福利啊&#xff01;手机照片误删&#xff0c;焕发出来的照片很模糊&#xff1f;这有何难&#xff01;手机照片管家APP竟然可以恢复高清图片&#xff0c; 不过现在安卓机只有OPPO…

社区发现SLPA算法

社区&#xff08;community&#xff09;定义&#xff1a;同一社区内的节点与节点之间关系紧密&#xff0c;而社区与社区之间的关系稀疏。 设图GG(V,E),所谓社区发现是指在图G中确定nc(>1)个社区C{C1,C2,...,Cnv},使得各社区的顶点集合构成V的一个覆盖。 若任意两个社区的顶点…

Matlab绘图--包含各种标示符的输入方法

Matlab绘图–包含各种标示符的输入方法。 文档汇总利润Matlab绘图各种标示符的输入方法 适合MATLAB学习者查阅使用 文档包含了整理的所有内容 完整版 标记符号 实线 b蓝色 . 点 s 方块 : 虚线 g绿色 o 圆圈 d 菱形