图与网络模型及方法 (一)Dijkstra算法(MATLAB)

本文深入解析了迪克斯特拉算法,一种用于寻找图中两点间最短路径的算法,详细介绍了其工作原理和迭代过程,同时提供了MATLAB代码示例,包括使用邻接矩阵表示节点距离和利用digraph和shortestpath函数计算最短路径。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

介绍

迪克斯特拉(Dijkstra )算法,也叫标志设置法。该方法的基本原理网上很多,这里我只说我的理解。
标志设置法是通用方法的一种特例。通用方法在我理解看来它是通过两个数组不断迭代来实现的,一个是“候选列表”,另一个是“节点标记”。“候选列表”来放节点,“节点标记”来存取从起点到对应节点的距离。开始的话“候选列表”只有节点1(开始节点),节点标记距离未知的话为无穷大,本节点到本节点距离为0,下面开始迭代:将节点i从候选列表中移出,如果因为节点i出发的边到其他节点j的距离加上开始节点到i的距离要及开始节点经过i到j 比“节点标记”中j的小,则更新节点标记,并把j加入候选列表。不断迭代得出结果。如果算法未停止,说明图中存在以1为起点含有长度为负值的环的路,或者序列中路的长度趋近负无穷大。
而标记设置法不过是每次移出“获选列表”的是对应于“标记节点”中距离最小的节点。

代码

clc,clear 
a=zeros(6); 
a(1,2)=50;a(1,4)=40;a(1,5)=25;a(1,6)=10; 
a(2,3)=15;a(2,4)=20;a(2,6)=25; 
a(3,4)=10;a(3,5)=20; 
a(4,5)=10;a(4,6)=25; 
a(5,6)=55; 
a=a+a'; 
a(find(a==0))=inf; 
pb(1:length(a))=0;pb(1)=1;index1=1;index2=ones(1,length(a)); 
d(1:length(a))=inf;d(1)=0;temp=1; 
while sum(pb)<length(a) 
   tb=find(pb==0); 
   d(tb)=min(d(tb),d(temp)+a(temp,tb)); 
   tmpb=find(d(tb)==min(d(tb))); 
   temp=tb(tmpb(1)); 
   pb(temp)=1; 
   index1=[index1,temp]; 
   temp2=find(d(index1)==d(temp)-a(temp,index1)); 
   index2(temp)=index1(temp2(1)); 
end 
d, index1, index2 

这是以一个矩阵为例,矩阵内容为节点之间的距离。
用矩阵a 存放各边权的邻接矩阵,行向量pb 、index1,index2、 d 分别用来存放P 标号信息、标号顶点顺序、标号顶点索引、最短通路的值。其中分量pb(i) = 1 i节点已标号,0:未标号index2(i) 存放始点到第i 点最短通路中第i 顶点前一顶点的序号;d (i) 存放由始点到第i 点最短通路的值。

简单方法

在Matlab中有可以计算最短路的函数,先用digraph生成加权图,再用shortestpath计算最短路。
以下Matlab代码可以计算上面有向图中节点 1 到 5 的最短路,path是最短路的路径,distance是最短距离。

a = [1,1,1,2,2,3,4];                    % 起点节点
b = [2,3,4,3,5,4,5];                    % 终点节点
c = [3,2,2,1,3,4,3];                    % 对应权值
g = digraph(a,b,c);                     % 创建图
[path,distance] = shortestpath(g,1,5);  % 计算最短路
plot(g)
--------------------- 
作者:Anonymoushi 
来源:优快云 
原文:https://blog.youkuaiyun.com/u011317780/article/details/82429511 
版权声明:本文为博主原创文章,转载请附上博文链接!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值