A*搜索算法的算法描述

f(x) = g(x) + h(x)

功能A*(开始,目标)

var closed :=空集

var q := make_queue(path(start))

当q不为空时

var p := remove_first(q)

var x:= p的最后一个节点

如果x是闭合的

继续

如果x =目标

返回p

将x添加到closed

继任者中的每个y(x)

排队(q,p,y)

返回失败A*改变自身行为的能力是基于启发式代价函数,在游戏中非常有用。速度和准确性之间的折衷将使你的游戏运行得更快。在很多游戏中,你并不真的需要得到最佳路径,只是近似而已。你需要什么取决于游戏中发生了什么或者运行游戏的机器有多快。假设你的游戏有平原和山地两种地形,在平原的移动代价是1,而在山地的移动代价是3,那么A星算法会认为在平地上的距离可以是山地的三倍进行等价搜索。这是因为从平原到山区可能有一条小路。将两个相邻点之间的评估距离设置为1.5可以加快A*的搜索过程。那么A*会拿3和1.5比较,不比拿3和1比较差。但是,有时候在山上移动可能比在山脚下绕来绕去更好。所以花更多的时间去寻找绕过大山的算法并不总是可靠的。同样,要实现这个目标,你可以通过减少山脚下的搜索行为来提高A-star算法的运行速度。这个弱点可以把A星算法的山地行动费用从3调整到2。这两种方法都会给出可靠的行动策略。