我的任务是为涉及解决“ 8难题”的作业编写A *搜索算法。
该算法的步骤之一是:
将所有扩展路径添加到Q。如果后代状态已经在Q中,则仅保留到状态Q的较短路径(其中Q是优先级队列(PQ))。
因此,如果状态相同但路径较短,我将需要搜索PQ。如果已经存在相同的状态,但路径更长,则需要从PQ中删除该状态。
我被指示使用STL PQ,而不是我自己的实现。我设法使用下面的方法来实现其他类型的搜索,以创建一个最小PQ-可以按需工作。
auto cmp = [](Puzzle* a, Puzzle* b) {
return a->getHCost() > b->getHCost();
};
std::priority_queue<Puzzle*, std::vector<Puzzle*>, decltype(cmp)> Q(cmp);
我该如何扩展实现,以便...
- 我可以执行暴力搜索-遍历STL PQ的每个元素?
- 我可以通过索引删除STL PQ中某个元素吗? -如果适当,将元素“改组”为“向上”。