A*寻路算法
2013-10-18 22:40
253 查看
对于初学者而言,A*寻路已经是个比较复杂的算法了,为了便于理解,本文降低了A*算法的难度,规定只能横竖(四方向)寻路,而无法直接走对角线,使得整个算法更好理解。
简而言之,A*寻路就是计算从起点经过该点到达终点的路程,并使得总路程达到最小值,因此引入一个公式:
F=G+H;
其中,F是从起点经过该点到达终点的总路程,G是起点到达该点的“已走路程”,H是该点到达终点的“预计路程”。
文本规定只能横竖(四方向)寻路,那么设置G=1,那么如果计算H的值?
由于H是预计路程,则在计算H时将不考虑障碍点,直接计算H到终点的路程,通过行列差来计算得到。
A*算法的核心就是按照这个公式逐步查找,直到查找到终点,算法引入开启列表和关闭列表,用于存储被开启和关闭的节点。
初期,地图上的节点都是未开启也未关闭的初始状态,当检测到一个节点时,就要将其周围节点存入开启列表中,通过计算父节点到各子节点的F值来检测,选取子节点中F值最小的节点放入关闭列表中,并将该节点的父节点改为目前的检测点(即该节点成为之后节点的父节点),然后开始查找下一个节点,如此循环,直到查找到终点。
本文为了降低算法难度,因此限制了寻路条件为四方向,后期可以加入斜方向的查找,即可以八方向寻路。
A*寻路算法的具体实现,详见代码。
开源地址 https://github.com/twobin/AStarPathFinding
简而言之,A*寻路就是计算从起点经过该点到达终点的路程,并使得总路程达到最小值,因此引入一个公式:
F=G+H;
其中,F是从起点经过该点到达终点的总路程,G是起点到达该点的“已走路程”,H是该点到达终点的“预计路程”。
文本规定只能横竖(四方向)寻路,那么设置G=1,那么如果计算H的值?
由于H是预计路程,则在计算H时将不考虑障碍点,直接计算H到终点的路程,通过行列差来计算得到。
A*算法的核心就是按照这个公式逐步查找,直到查找到终点,算法引入开启列表和关闭列表,用于存储被开启和关闭的节点。
初期,地图上的节点都是未开启也未关闭的初始状态,当检测到一个节点时,就要将其周围节点存入开启列表中,通过计算父节点到各子节点的F值来检测,选取子节点中F值最小的节点放入关闭列表中,并将该节点的父节点改为目前的检测点(即该节点成为之后节点的父节点),然后开始查找下一个节点,如此循环,直到查找到终点。
本文为了降低算法难度,因此限制了寻路条件为四方向,后期可以加入斜方向的查找,即可以八方向寻路。
A*寻路算法的具体实现,详见代码。
效果展示
GitHub开源
博文中的A*寻路算法已开源在GitHub上,希望与大家一起分享、改进!开源地址 https://github.com/twobin/AStarPathFinding
相关文章推荐
- 对云计算时代软件技术发展的若干思考和实践和软件工程技术思索 读后感
- 【重点】买票程序——好用的Runnable
- Java集合中那些类是线程安全的
- Linux如何查找文件安装路径?
- 实验4:在分支循环结构中调用自定义函数
- Matlab函数——fftshift
- TranslateAnimation详解
- 保护密码的利器:Ubuntu 之 KeePassX
- kernel中遍历所有进程
- 数组名 vs 指针
- 杨氏矩阵找数
- linux系统下将php和mysql命令加入到环境变量中的方法
- char类型和string类型(C++,C#)
- 免费虚拟机VirtualBox 4.3更新 支持Windows 8.1和Mavericks
- nyoj-527-AC_mm玩dota
- OpenLayer(OSM)
- 如何使用命令行测试你的网速
- 如何使用命令行测试你的网速
- iLinux:Linux平台最大的自定义图标收藏铺
- OCP-1Z0-051-V9.02-87题