美文网首页
漫画:什么是 A* 寻路算法?

漫画:什么是 A* 寻路算法?

作者: 大胡子商人 | 来源:发表于2018-01-03 17:34 被阅读29次
image image image image image image image

比如像这样子:

image image image image image image image image image image image image image image image image

第一步:把起点放入OpenList

image

第二步:找出OpenList中F值最小的方格,即唯一的方格Node(1,2)作为当前方格,并把当前格移出OpenList,放入CloseList。代表这个格子已到达并检查过了。

image

第三步:找出当前格上下左右所有可到达的格子,看它们是否在OpenList当中。如果不在,加入OpenList,计算出相应的G、H、F值,并把当前格子作为它们的“父亲节点”。

image

图中,每个格子的左下方数字是G,右下方是H,左上方是F。

image image image

Round2 ~ 第一步:找出OpenList中F值最小的方格,即方格Node(2,2)作为当前方格,并把当前格移出OpenList,放入CloseList。代表这个格子已到达并检查过了。****

image

Round2 ~ 第二步:找出当前格上下左右所有可到达的格子,看它们是否在OpenList当中。如果不在,加入OpenList,计算出相应的G、H、F值,并把当前格子作为它们的“父亲节点”。

image

为什么这一次OpenList只增加了两个新格子呢?因为Node(3,2)是墙壁,自然不用考虑,而Node(1,2)在CloseList当中,说明已经检查过了,也不用考虑。

Round3 ~ 第一步:找出OpenList中F值最小的方格。由于这时候多个方格的F值相等,任意选择一个即可,比如Node(2,3)作为当前方格,并把当前格移出OpenList,放入CloseList。代表这个格子已到达并检查过了。****

image

Round3 ~ 第二步:找出当前格上下左右所有可到达的格子,看它们是否在OpenList当中。如果不在,加入OpenList,计算出相应的G、H、F值,并把当前格子作为它们的“父亲节点”。

image

剩下的就是以前面的方式继续迭代,直到OpenList中出现终点方格为止。这里就仅用图片简单描述了,方格中数字表示F值:

image image image image image image image image image image image image image image image image

public Node aStarSearch(Node start, Node end) {
// 把起点加入 open list
openList.add(start);
//主循环,每一轮检查一个当前方格节点
while (openList.size() > 0) {
// 在OpenList中查找 F值最小的节点作为当前方格节点
Node current = findMinNode();
// 当前方格节点从open list中移除
openList.remove(current);
// 当前方格节点进入 close list
closeList.add(current);
// 找到所有邻近节点
List<Node> neighbors = findNeighbors(current);
for (Node node : neighbors) {
if (!openList.contains(node)) {
//邻近节点不在OpenList中,标记父亲、G、H、F,并放入OpenList
markAndInvolve(current, end, node);
}
}
//如果终点在OpenList中,直接返回终点格子
if (find(openList, end) != null) {
return find(openList, end);
}
}
//OpenList用尽,仍然找不到终点,说明终点不可到达,返回空
return null;
}

image

几点说明:

1.这里对于A*寻路的描述做了很大的简化。实际场景中可能会遇到斜向移动、特殊地形等等因素,有些时候需要对OpenList中的方格进行重新标记。

2.截图中的小游戏可不是小灰开发的,而是一款经典的老游戏,有哪位小伙伴玩过吗?

相关文章

  • 漫画:什么是 A* 寻路算法?

    比如像这样子: 第一步:把起点放入OpenList 第二步:找出OpenList中F值最小的方格,即唯一的方格No...

  • 百度无人驾驶apollo项目路径规划a*算法分析

    算法分析 车辆路径规划寻路算法有很多,apollo路径规划模块使用的是启发式搜索算法A*寻路算法。 a*算法是一种...

  • JPS寻路算法

    JPS寻路算法是啥?JPS全称是:jump point search,这个算法实际上是对A* 寻路算法的一个改进,...

  • Hello,a~*寻路算法!

    寻路算法是游戏中经常用到的算法之一,而这其中A~* 算法大概是我们最耳熟的寻路算法了,下面我们会通过A~* 算法与...

  • Unity学习笔记——A*寻路算法的应用

    初步了解了一些寻路算法后,本以为dijstra是比较合适的寻路算法,今天仔细看了关于A星寻路算法的教程和视频后,我...

  • 算法:A*寻路算法

    A*Search,是一种寻找有效路径的算法。 [OpenList][CloseList][F = G + H]Op...

  • A*寻路算法

    原文:http://www.cnblogs.com/wangnfhy/p/4956711.html 参考:http...

  • A*寻路算法

    代码实现

  • A* 寻路算法

    A 算法*是一种解决图遍历问题的计算机算法,在电子游戏中最主要的应用是寻找地图上两点间的最佳路线。 不能朝障碍物所...

  • cocos creator Astar寻路导航与地图编辑

    1、插件或者TileMap工具生成地图json文件 2、astar寻路算法 3、将json文件与寻路算法结合,获得...

网友评论

      本文标题:漫画:什么是 A* 寻路算法?

      本文链接:https://www.haomeiwen.com/subject/owqknxtx.html