MATLAB实现的A*算法
总共三个.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)