研究A*算法二叉堆实现时遇

为实现二叉堆,我写了个BTree的类,该类封装了类似于树的特性功能,采用一维数组模拟树结构,而非链表,这样速度会有优势。

在PathFinding中我使用了两个BTree的对象,用以实现打开列表与关闭列表,但却出现了问题。BTree.AddNode()增加节点会对该节点在数组中的位置(nPos)进行修改,而打开列表与关闭列表的两个数组是不一样的,所以在从打开列表取出并删除然后再加入到关闭列表中这样的操作就将nPos改掉了。按正确说,如NodeArray[0].nPos应该等于0,但经过一轮循环后,实际是NodeArray[0].nPos== 1。

解决方法是,打开列表使用BTree,而关闭列表使用list<AStarNode*>。

发表评论

邮箱地址不会被公开。 必填项已用*标注

* Copy This Password *

* Type Or Paste Password Here *