寻路算法之A*
2016-07-12 10:47
155 查看
最近接触到MOBA(Multiplayer Online Battle Arena)这个新名词,发现npc寻路有点意思。于是回顾了一下经典的A*算法。
closed列表:记录排除在路线之外的点
对于路线中的一个点:
3.1 G值:从开始到此点的移动量
3.2 H值:从此点到终点的估计移动量,一般为不考虑障碍的最短距离。
3.3 F值:等于G+H,此值的含义是选取当前点的一个评价值,即如果此值越小,表明选此点后,离终点越近。
将起点加入open列表
循环开始
从open列表取出一个G+H值最小的点,并将此点加入closed列表
由于open列表中会有若干个具有同样G+H值的点,为了快速,自己习惯在此引入DFS:优先选取其中G值较大的点
遍历每一个与此点相通的点:
如果此点在closed列表中,则跳过;
如果此点不在open列表中,计算相应的值,并将此点加入open列表;
如果此点在open列表中,检查如果新的G+H值小于原值,则更新此点的G值与H值;
结束条件
直到终点从open列表中挑出。
相关数据结构
open列表:记录可用来被寻找的点closed列表:记录排除在路线之外的点
对于路线中的一个点:
3.1 G值:从开始到此点的移动量
3.2 H值:从此点到终点的估计移动量,一般为不考虑障碍的最短距离。
3.3 F值:等于G+H,此值的含义是选取当前点的一个评价值,即如果此值越小,表明选此点后,离终点越近。
算法
初始化将起点加入open列表
循环开始
从open列表取出一个G+H值最小的点,并将此点加入closed列表
由于open列表中会有若干个具有同样G+H值的点,为了快速,自己习惯在此引入DFS:优先选取其中G值较大的点
遍历每一个与此点相通的点:
如果此点在closed列表中,则跳过;
如果此点不在open列表中,计算相应的值,并将此点加入open列表;
如果此点在open列表中,检查如果新的G+H值小于原值,则更新此点的G值与H值;
结束条件
直到终点从open列表中挑出。
代码
代码
相关文章推荐
- 书评:《算法之美( Algorithms to Live By )》
- 动易2006序列号破解算法公布
- C#递归算法之分而治之策略
- Ruby实现的矩阵连乘算法
- C#插入法排序算法实例分析
- C#算法之大牛生小牛的问题高效解决方法
- C#算法函数:获取一个字符串中的最大长度的数字
- 超大数据量存储常用数据库分表分库算法总结
- C#数据结构与算法揭秘二
- C#冒泡法排序算法实例分析
- 算法练习之从String.indexOf的模拟实现开始
- C#算法之关于大牛生小牛的问题
- C#实现的算24点游戏算法实例分析
- 经典排序算法之冒泡排序(Bubble sort)代码
- c语言实现的带通配符匹配算法
- 浅析STL中的常用算法
- 算法之排列算法与组合算法详解
- C++实现一维向量旋转算法
- Ruby实现的合并排序算法
- C#折半插入排序算法实现方法