A*寻路算法就是启发式探索的一个典型实践,在寻路的过程中,给每个节点绑定了一个估计值(即启发式),在对节点的遍历过程中是采取估计值优先原则,估计值更优的节点会被优先遍历。
如下图区域,被简化成6*6的小方格。其中绿色表示起点,红色表示终点,黑色表示路障,不能通行。

先描述A*算法的大致过程:
- 将初始节点放入到open列表中。
- 判断open列表。如果为空,则搜索失败。如果open列表中存在目标节点,则搜索成功。
- 从open列表中取出F值最小的节点作为当前节点,并将其加入到close列表中。
- 计算当前节点的相邻的所有可到达节点,生成一组子节点。对于每一个子节点:
- 如果该节点在close列表中,则丢弃它
- 如果该节点在open列表中,则检查其通过当前节点计算得到的F值是否更小,如果更小则更新其F值,并将其父节点设置为当前节点。
- 如果该节点不在open列表中,则将其加入到open列表,并计算F值,设置其父节点为当前节点。
- 转到2步骤
概括:
1、两个集合+一个公式
* openlist\closelist --- 集合
* F=G+H --- 公式
* openlist:可达到的格子
* closelist:已经到达的格子
* G:从起点到当前格子的成本
* H:不考虑障碍的情况下,当前格子到目标格子的距离
* F:G+H

代码如下:
package com.wemew.wmgame.sort;
import java.util.ArrayList;
import java.util.List;
/**
* A*寻路算法
* <p>
* 寻路算法
* 1、两个集合+一个公式
* openlist\closelist
* F=G+H
* openlist:可达到的格子
* closelist:已经到达的格子
* G:从起点到当前格子的成本
* H:不考虑障碍的情况下,当前格子到目标格子的距离
* F:G+H
*
*/
public class FindRoad {
public static v

A*算法是一种启发式寻路方法,利用F=G+H公式评估节点优先级。在6*6的格子地图中,从起点到终点,避开黑色障碍,通过openlist和closelist管理节点状态,不断更新F值找到最佳路径。当open列表为空或包含目标节点时,搜索结束。算法包括将节点加入open列表,比较F值并更新,以及将到达节点移至close列表。
最低0.47元/天 解锁文章
1579

被折叠的 条评论
为什么被折叠?



