A*算法求解迷宫;算法的确犀利,太快了,即便我写的不够快- -;

一个求解截图

 

 

 

 

A*算法总结

 

1.           将开始节点放入开放列表(开始节点的FG值都视为0);

2.           重复一下步骤:

            i.        在开放列表中查找具有最小F值的节点,并把查找到的节点作为当前节点;

           ii.        当前节点从开放列表删除, 加入到封闭列表;

         iii.        当前节点相邻的每一个节点依次执行以下步骤:

1.     如果该相邻节点不可通行或者该相邻节点已经在封闭列表中,则什么操作也不执行,继续检验下一个节点;

2.     如果该相邻节点不在开放列表中,则将该节点添加到开放列表中, 并将该相邻节点的父节点设为当前节点,同时保存该相邻节点GF;

3.     如果该相邻节点在开放列表中, 则判断若经由当前节点到达该相邻节点G值是否小于原来保存的G,若小于,则将该相邻节点的父节点设为当前节点,并重新设置该相邻节点GF.

        iv.        循环结束条件:

终点节点被加入到开放列表作为待检验节点时, 表示路径被找到,此时应终止循环;

或者当开放列表为空,表明已无可以添加的新节点,而已检验的节点中没有终点节点则意味着路径无法被找到,此时也结束循环;

3.           终点节点开始沿父节点遍历, 并保存整个遍历到的节点坐标,遍历所得的节点就是最后得到的路径;

 

 

路径排序

 

决定哪些方格会形成路径的关键是下面这个等式:

F = G + H

这里

·                  G=从起点A沿着已生成的路径到一个给定方格的移动开销。

·                  H
=从给定方格到目的方格的估计移动开销。这种方式常叫做试探,有点困惑人吧。其实之所以叫做试探法是因为这只是一个猜测。在找到路径之前我们实际上并不知
道实际的距离,因为任何东西都有可能出现在半路上(墙啊,水啊什么的)。本文中给出了一种计算H值的方法,网上还有很多其他文章介绍的不同方法。

我们要的路径是通过反复遍历开放列表并选择具有最小F值的方格来生成的.

 

 

重要的是,在计算H值时并不考虑任何障碍物。因为这是对剩余距离的估计值而不是实际值(通常是要保证估计值不大于实际值――译者注)。这就是为什么这个方式被叫做试探
法的原因了。

 

 

主要在于维护开放封闭列表的方式,这里用一个结构体矩阵_seal[][]标记开放或者封闭,如果开放,则point还记录了该格子所对应状态结点的指针,可以方便直接取出该节点修改信息.

  • 5
    点赞
  • 34
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值