总结A*算法在游戏开发中的实现和设计
在阅读了以下有关A*算法的入门级介绍之后,自己打算再整理一遍,以便消化和进一步理解。
A*算法描述
-
1.将起始点添加至待处理集合A(原文中的OpenList) 2.循环重复以下步骤
- a)寻找待处理集合A中F值最低的节点b;
- b)将节点b从待处理集合A中移除,并添加至已处理集合B(原文中的ClosedList)
- c)检测与节点b邻接的节点,进行以下处理:
①如果节点已经在集合B中,则不做任何处理;
②如果节点不在集合A中,则按照以下步骤处理:
——操作1:标记节点的父节点为当前节点b,并计算F/G/H的值;
——操作2:将节点添加至集合A。
③如果节点已经存在集合A中,则临时计算从当前节点b到该节点的F/G值,如果F值更小,则更新该节点的信息,既:更新节点的F/G,并修改其父节点为当前节点b(这表明从节点b到达该点为当前更好的路径)。
-
3.循环终止的条件
-
a)目标节点已经被添加至集合A(也可以控制成被添加至集合B作为条件)
或
b)还未找到目标节点时,集合A已经被掏空(集合A没有备选项了),此时表明这样的路径不存在。 4.保存路径
- 从目标路径的父节点开始一层一层向上直到起始点。
算法细节注释
-
1.循环工作的第一步:挑选代价消耗F最小的节点