比如像这样子:

第一步:把起点放入OpenList

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

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

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

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

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

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

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

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

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

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 listcloseList.add(current);// 找到所有邻近节点List<Node> neighbors = findNeighbors(current);for (Node node : neighbors) {if (!openList.contains(node)) {//邻近节点不在OpenList中,标记父亲、G、H、F,并放入OpenListmarkAndInvolve(current, end, node);}}//如果终点在OpenList中,直接返回终点格子if (find(openList, end) != null) {return find(openList, end);}}//OpenList用尽,仍然找不到终点,说明终点不可到达,返回空return null;
}

几点说明:

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

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

漫画:什么是A*寻路算法?相关推荐

  1. 【Android】基于A星寻路算法的简单迷宫应用

    简介 基于[漫画算法-小灰的算法之旅]上的A星寻路算法,开发的一个Demo.目前实现后退.重新载入.路径提示.地图刷新等功能.没有做太多的性能优化,算是深化对A星寻路算法的理解. 界面预览: 初始化: ...

  2. 漫画:什么是MD5算法?

    来自:梦见(微信号:dreamsee321) 摘要哈希生成的正确姿势是什么样呢?分三步: 1.收集相关业务参数,在这里是金额和目标账户.当然,实际应用中的参数肯定比这多得多,这里只是做了简化. 2.按 ...

  3. 漫画:如何破解MD5算法?

    来自:梦见(微信号:dreamsee321) 在之前的漫画中,我们介绍了MD5算法的基本概念和底层原理,没看过的小伙伴们可以点击下面的链接: 漫画:什么是MD5算法? 这一次,我们来讲解如何破解MD5 ...

  4. A*寻路算法的探寻与改良(三)

    A*寻路算法的探寻与改良(三) by:田宇轩                                        第三分:这部分内容基于树.查找算法等对A*算法的执行效率进行了改良,想了解细 ...

  5. 关于A*寻路算法的认识

    最近要参加学校的APP比赛,我们组做的是一个3D迷宫的小APP,我负责的是迷宫的生成与寻路. 寻路算法选择的是A*寻路算法,具体参考的是下面的这篇博客. 本文主要是谈谈自己对A*算法的理解,具体细节, ...

  6. 光速AStar寻路算法(C++)

    光速AStar寻路算法(C++) 一.最终效果 可以看到,我创建了500个小动物,也有110的FPS.虽然它们并不是每一帧都在计算寻路,但是平均下来不卡顿也不错了.我是i7 6700 + GT 720 ...

  7. Cocos2d-x 寻路算法解析(一): 距离优先

    寻路这块在游戏中一直很重要,花了点时间研究了下这个问题,主要参考的是<Data Structures For Game Programmers>,其他的算法用普通Console演示就行了, ...

  8. Cocos2d-x 寻路算法解析(二): 离目的地的距离优先

    看这个图,我们发现这个寻路算法有点傻,明明终点在右侧却每个方向都找.难道没有其他办法了吗?从现实生活中我们知道东西如果在东边,当然是往东边搜索才是最好的办法. Figure 2 计算机中如何表示离目标 ...

  9. 寻路算法实例解析:贪吃蛇AI的实现

    本文是寻路算法的实际应用篇,以贪吃蛇的实现为例子. 1.首先看下这个在微博上很火的贪吃蛇gif 这次我们尝试用代码来模拟下,说不定上面这个图就是计算机搞的. 2.讲贪吃蛇snake AI之前,我们先看 ...

  10. 游戏中常用的寻路算法的分享(4)处理移动中的障碍物

    一个寻路算法会计算出一条绕过静止障碍物的路径,但如果障碍物会移动呢?当一个单位移动到达某特定点时,原来的障碍物可能不在那点了,或者在那点上出现了新的障碍物.如果路线可以绕过典型的障碍物,那么只要使用单 ...

最新文章

  1. 英语单词 factor cull
  2. SQL server 中SQL语句实战操作
  3. ajax返回的是流如何转换为pdf,如何在AJAX请求成功响应中返回PDF文件
  4. ASP.Net全局变量的设置和读取方法
  5. ASP.NET跨页面传值(二)
  6. ITK:在不复制内存的情况下为每个像素添加常量
  7. 使用 做签名的post_ASP.NET WebApi 基于分布式Session方式实现Token签名认证
  8. 项目实施双机热备备忘
  9. Visual Studio 2017发布会:黄金时代的家族聚会
  10. find linux 目录深度_浪里淘沙,详解Linux系统中Find命令的实用技巧
  11. Linux_创建母版,快速克隆,如何移动虚拟机.ziw
  12. c++ vector,list,deque,map,set,hash_map 特点及区别
  13. 知识图谱构建流程与实现技术浅谈
  14. 文曲星猜数字用c语言编程,文曲星中的猜数字游戏,要猜一个四位数,有什么通用公式?...
  15. 【Python】Windows微信清理工具
  16. 从招式与内功谈起——设计模式概述(三)
  17. “寻找下一代CTO”-- 机会啊
  18. Nuxt - 自定义页面布局,<Nuxt /> 个性化多套模板(一个项目内既要有用户正常浏览的普通页面,又要存在后台管理系统布局的页面)
  19. LeetCode刷题——36.有效的数独
  20. 超标量处理器设计——第二章_Cache

热门文章

  1. RadioButton 与 XML 之间的协调使用
  2. 【转】HTML标签大全
  3. sharepoint 2007 无法自动跳转到default.aspx
  4. Ionic2 分享(微信分享+QQ分享+复制到剪贴板+微博分享)
  5. Triangular Pastures
  6. [转载] 七龙珠第一部——第077话 皮拉夫大作战
  7. Windows Server 2012的服务管理自动化
  8. 翻译Programming WCF Services第二版
  9. Asf PHP扩展框架之预警模块介绍
  10. [NOIP2013D2]