MATLAB实现的A*算法

MATLAB实现的A*算法

exp

总共三个.m文件

1.Astar.m

clear;
clc;
%%
%设置地图参数
WIDTH  = 40;          %地图长度,即行数
LENGTH = 40;		  %地图长度,即列数
STARTPOINTX = WIDTH/4+2;      %起点横坐标
STARTPOINTY = LENGTH/4+2;	   %起点纵坐标
ENDPOINTX   = WIDTH-STARTPOINTX;     %终点横坐标
ENDPOINTY   = LENGTH-STARTPOINTY;    %终点纵坐标
OBSTACLEAMOUNT = WIDTH*LENGTH/4;     %障碍物数量,随机产生障碍物

%%
%将地图上的点初始化
point(WIDTH,LENGTH) = PointInfo;
for i = 1:WIDTH          	
    for j = 1:LENGTH
        point(i,j).xCoordinate = i;   %坐标设置好
        point(i,j).yCoordinate = j;
        point(i,j).h = 10*(abs(i-ENDPOINTX) + abs(j-ENDPOINTY) );      %可以事先计算出H,H这里用曼哈顿距离
    end                                                                %将H改为0,即Dijastra算法
end                                                                    %将H改为Inf,即广度优先算法BFS
point(STARTPOINTX,STARTPOINTY).g = 0; %起始点的g实际代价为0             %将障碍物数量设置为0,可以更好地看出他们的区别

%%
%产生障碍物
point(STARTPOINTX,STARTPOINTY).isStartPoint = true;
point(ENDPOINTX,ENDPOINTY).isEndPoint       = true;
tempX = 0;    %定义随机障碍物的临时坐标
tempY = 0;
tempObs = OBSTACLEAMOUNT;
%rng(0);      %去掉注释可使产生的随机障碍物不变   
while tempObs > 0
	tempX = randi(WIDTH,1);        %randi产生1-WIDTH之间的随机整数
	tempY = randi(LENGTH,1);
	if ~( ((tempX == STARTPOINTX) && (tempY == STARTPOINTY)) || ((tempX == ENDPOINTX) && (tempY == ENDPOINTY)) ) %#ok<*ALIGN> %随机产生的点不能为起始点和终点
    	if ~point(tempX,tempY).isObstacle        %只有不是障碍物的才能变成障碍物,不能重复设置
			point(tempX,tempY)
  • 16
    点赞
  • 96
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值