基于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:m
    for 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>0
      for j=1:kk1
          te=A(k,a_id)+A(a_id,b1(j));
          if te<A(k,b1(j))
              A(k,b1(j))=te;
          end
      end
      miid=1;
      for j=2:kk
        if A(k,b(j))<A(k,b(miid))
            miid=j;
        end
      end
      a_id=b(miid);
      b=[b(1:(miid-1)),b((miid+1:kk))];
      kk=length(b);
      if a_id>k

      miid1=find(b1==a_id);

      b1=[b1(1:(miid1-1)),b1((miid1+1):kk1)];

      kk1=length(b1);

      end

    end

    for j=(k+1):m

        A(j,k)=A(k,j);

    end

end

m=size(a,1);
path=zeros(m);

for k=1:m

    for i=1:m

        for j=1:m

            if a(i,j)>a(i,k)+a(k,j)

                a(i,j)=a(i,k)+a(k,j);

                path(i,j)=k;

            end

        end

    end

end

dist=a(sb,db);

parent=path(sb,:);%从起点sb到终点db的最短路上各顶点的前驱顶点

parent(parent==0)=sb;%path中的分量为0,表示该顶点的前驱是起点

mypath=db; t=db;

while t~=sb

        p=parent(t); mypath=[p,mypath];

        t=p;

end

fprintf('最短路距离矩阵: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.

  • 4
    点赞
  • 61
    收藏
    觉得还不错? 一键收藏
  • 8
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值