我第一次尝试用c ++编写A *搜索,但是我以前用Java编写过它们。
我在检查openList中是否已有内容时遇到麻烦。OpenList是Node的priority_queue,但是我知道您不能简单地遍历优先级队列。
我的想法是,我将openList传递给一个函数,该函数会将元素复制到临时向量中,然后可以迭代此临时向量。显然,这对于极快且高效的运行时间不利,但我想不出另一种解决方法。
封闭列表非常简单,因为您可以看到仅遍历向量。
这是两个列表:
priority_queue<Node, vector<Node>, NodeCompare> openList;
vector<Node> closedList;
码:
bool checkInClosedList(std::vector<Node>& v,int x, int y){
for (std::vector<Node>::iterator iter = v.begin(); iter != v.end(); ++iter) {
if(iter->getX() == x && iter->getY() == y){
return true;
}
}
return false;
}
我该怎么做,但要priority_queue <Node, vector<Node>, NodeCompare>
?
我已经测试了优先级队列本身,但是我的A *陷入了无限循环,因为它一直在检查已经检查过的节点!
干杯,克里斯。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句