您的位置:首页 > 编程语言 > MATLAB

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

2018-08-24 11:23 337 查看

理解:
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

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: