A*算法与matlab实现

本文介绍了A*算法的基本思想和应用,它是一种启发式搜索算法,常用于游戏AI寻路。A*算法通过结合当前点到起点的距离g和到终点的估算距离h来选择路径。文章提供了一个MATLAB实现的示例,通过动态展示路径搜索过程,帮助理解算法原理。
摘要由CSDN通过智能技术生成

A*算法是一种寻路算法,常常被用在游戏智能ai的自动寻路过程等等,它较之于图论的最短路算法而言,更加适用于节点巨大的情况下,但是该算法是一种启发式搜索算法,并不能保证总是找到最优路径。

A*的算法思想如下:

定义两个函数:f和g,其中f揭示当前点到出发点的距离,g揭示当前点到终点的距离。

对于每个将要遍历的点,h=f+g是其启发函数,每次选择待选择节点中启发函数值最大的节点放入路径之中,重复此步骤。

算法具体步骤如下:

  1. 将方块添加到open列表中,该列表有最小的和值。且将这个方块称为S吧。
  2. 将S从open列表移除,然后添加S到closed列表中。
  3. 对于与S相邻的每一块可通行的方块T:
    1. 如果T在closed列表中:不管它。
    2. 如果T不在open列表中:添加它然后计算出它的和值。
    3. 如果T已经在open列表中:当我们使用当前生成的路径到达那里时,检查F G和值是否更小。如果是,更新它的和值和它的前继。

因为matlab的画图功能比较强大,所以下面使用matlab实现最基本的A*算法:

 

function[open,close]=Astar(map)

 

[row,col]=size(map);

close=struct('row',-1,'col',-1,'g',0,'h',0);%????????????????????????

closelen=1;

open=struct('row',-1,'col',-1,'g',-1,'h',-1);%????????????????????????

openlen=0;

bindex=1;

fork=1:row

   forj=1:col

       ifmap(k,j)==1

            barrierrow(bindex)=-k;

            barriercol(bindex)=j;

            bindex=bindex+1;

       end

   end

end<

评论 16
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值