对于初学者而言,A*寻路已是个比较复杂的算法了,为了便于理解,本文下降了A*算法的难度,规定只能横竖(四方向)寻路,而没法直接走对角线,使得整个算法更好理解。css
简而言之,A*寻路就是计算从起点通过该点到达终点的路程,并使得总路程达到最小值,所以引入一个公式:html
F=G+H;git
其中,F是从起点通过该点到达终点的总路程,G是起点到达该点的“已走路程”,H是该点到达终点的“预计路程”。github
文本规定只能横竖(四方向)寻路,那么设置G=1,那么若是计算H的值?算法
因为H是预计路程,则在计算H时将不考虑障碍点,直接计算H到终点的路程,经过行列差来计算获得。.net
A*算法的核心就是按照这个公式逐步查找,直到查找到终点,算法引入开启列表和关闭列表,用于存储被开启和关闭的节点。htm
初期,地图上的节点都是未开启也未关闭的初始状态,当检测到一个节点时,就要将其周围节点存入开启列表中,经过计算父节点到各子节点的F值来检测,选取子节点中F值最小的节点放入关闭列表中,并将该节点的父节点改成目前的检测点(即该节点成为以后节点的父节点),而后开始查找下一个节点,如此循环,直到查找到终点。get
本文为了下降算法难度,所以限制了寻路条件为四方向,后期能够加入斜方向的查找,便可以八方向寻路。iframe
A*寻路算法的具体实现,详见代码。it
博文中的A*寻路算法已开源在GitHub上,但愿与你们一块儿分享、改进!