A*算法

1. 初始化图,openlist,closedlist
2. 将起点加入openlist,
3. 在openlist中寻找启发函数值F=G+H最小的节点v,
4. 将v从openlist中删除,
5. 将从openlist中删除的节点v加入closedlist
6. 对于节点v周围的8个节点v1而言:
    如果v1是障碍物或者已经处于closedlist中了,则不做任何处理
    如果v1不在openlist中则将v1加入openlist中
    如果v1已经在openlist中,则比较v1经过v到达起点的代价G1是否比之前的代价G0要小,如果G1大于G0,不做任何处理,如果G1<G0,则将v1的父节点设为v,并更新F=G1+H的值,
7. 如果终点goal也位于openlist中,说明路径已经找到,否则返回步骤3进行循环
8. 如果openlist为空,终点还没有找到,则说明路径不存在
9. 最后从终点gaol通过其父节点回溯,寻找起点到终点的路径。
用C++实现A*, 其中包含两个对象,节点对象,及A*路径搜索对象。
节点对象可以如下定义:

猜你喜欢

转载自blog.csdn.net/sinat_19682279/article/details/79965584