A*算法

A*算法是游戏非常常用的寻路算法。至于其理论知识就不贴出来了,网上太多了。一开始也没有看理论性太强的东西,先实现了再说。其实刚看完算法就有一种特想证明其正确性的想法。自我感觉A*算法和动态规划的思想是相同的(动态规划其实也不是熟悉,运筹学白学了)。

f(n) = g(n) + h(n);

0.节点信息{节点位置,父节点,F值,G值,H值},确定起始节点和终结节点;

1.初始化开启队列、关闭队列(开启队列表示等待探索的节点集,关闭队列表示已经探索过的节点),将起始点信息加入开启队列中;

2.在开启队列中找出 F 值最小的节点。若队列为空则返回失败,即未能找到路线到达终点的。将节点转到关闭队列中,若节点为终结节点,则返回成功。

3.将2中寻找到的节点相邻的节点加入开启队列

  3.1 若相邻节点不可达或在关闭队列中,则不加入到开启队列中;

  3.2 若相邻节点不在开启队列中,则填写节点信息将节点加入开启队列中;

  3.3 若相邻节点在开启队列中,则比较两个节点F值,相邻的F值更小,则更新开启队列对应节点的信息(更新F值);

4.回到2,继续寻路。

代码就不想贴了,自己练吧;否则你只能仰慕别人。实在写不出再上网搜吧~

A*算法_第1张图片

你可能感兴趣的:(算法)