A Star Search - A*搜索


问题

的二维方格图中从点移动到点。中存在一些黑色的方块阻隔移动。

解法

A*算法是一种启发式搜索(DFS和BFS属于无差别搜索),通过函数来评价节点的搜索代价(到目标的距离)。当存在多个待搜索节点时,总是优先搜索那些离目标更最近的点来提高搜索效率。

AStarSearch1.png

对于节点,函数,其中表示点到的估算/评价距离,表示从节点到节点需要移动的最短距离,表示从点到节点的估算距离。

设置表和表,其中表类似BFS中的队列,存放待搜索的节点表存放所有已搜索过的节点,并存储从到达的最短距离

初始时将推入中,且,表示到达自己的最短距离为。注意本算法中不会使用染色来标记某个节点是否已经被访问,而是用表来记录。

每次从取出节点,该节点满足中是最小的(若存在多个相同的最小则随意选取其中一个即可),若则搜索结束;否则考虑将四周的节点加入表中,且显然因为多走了一步有。注意,若中已经存在节点,说明在此之前已经被搜索过,这时比较旧的与当前新的,显然为了搜索最短路径,若则用新路径替换旧路径,否则忽略节点不将其加入表。

为空时,说明永远无法到达

本问题中该算法的时间复杂度为


八数码问题


源码

AStarSearch.h

AStarSearch.cpp

测试

AStarSearchTest.cpp