AbstractSearchState // 堆里面的索引
Grid2DSearchState: AbstractSearchState // x y g 父节点 堆里面的索引 栅格搜索地图里面的一个cell
heapintelement:AbstractSearchState // 堆元素:索引 键值
CIntHeap: heapintelement // 二叉堆 openlist
Grid2DSearchState 二维栅格地图 每一个单元通过堆里面的索引与 CIntHeap 二叉堆里面的每一个元素对应起来
A* 流程:
找到开始目标点;初始化开始目标点;开始目标点的g为0,计算key,f=g+h; 加入openlist(进行了堆操作 插入节点);
while(openlist 非空 && 目标还没有被扩展到):
得到f最小的节点;加入扩展节点,加入closelist;得到扩展节点;
看看扩展节点在不在地图 在不在close list;查看扩展节点和当前节点会 不会碰撞;满足条件的话,扩展节点变为被处理节点 searchPredState(当前节点的子 节点);
查看扩展节点的g需不需要更新,没有被扩展过肯定要更新,当前的g大 于当前节点的g加上cost 需要更新;另外更新键值也就是f;
看看扩展节点有没有在堆openlist 不在就加入 在就更新堆;
更新扩展节点searchPredState的父节点为当前节点searchExpState;
以上循环直到找到 goal 或者 openlist 变为空 end while
将以上搜索的节点加入path 就是最短路径