MATLAB实现A*;dijkstra;floyd三种路径规划算法

本文深入解析了Floyd、Dijkstra及A*三种算法的特点与应用,指出Floyd适用于遍历求解,Dijkstra基于动态规划,而A*在Dijkstra基础上增加了预测处理。文中通过对比三者的运行速度与结果准确性,提供了算法选择的指导,并附带了Floyd算法的MATLAB实现代码。

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

理解:
floyd 属于遍历求解;dijkstra属于动态规划;A*在dijkstra的基础上加了一部分预测处理。三者运行速度逐渐降低,但A *无法保证结果为最优解。
floyd:
以加中间点的方式循环迭代,即整个距离矩阵以每个节点为中间点进行更迭。
代码:
%弗洛伊德算法(floyd):两点之间最段路径,,,核心点是找出中间值
cost=round(rand(10,10).*50);%随机产生数据
len_n=size(cost,1);%计算节点的个数
connect_all=cell(len_n,len_n);%预设两点之间的连接节点
for i=1:len_n
for j=1:len_n
if abs(i-j)==0
cost(i,j)=0;%相同点之间的距离是0
end
connect_all{i,j}=[i,j];%预设两点之间的连接节点
end
end
cost_last=cost;%预设最短的距离
% 开始计算
tic
for i=1:len_n
for j=1:len_n
for z=1:len_n
if cost_last(j,z)>cost_last(j,i)+cost_last(i,z)
cost_last(j,z)=cost_last(j,i)+cost_last(i,z);
road1=connect_all{j,i};
road2=connect_all{i,z};
connect_all{j,z}=[road1(1:end),road2(2:end)];%更新连接
end
end
end
end
toc

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值