我正在努力实现最佳优先搜索算法,以解决作业的8难题问题。根据要求,必须使用[Standard Template Library(STL)。]中的(min)优先级队列或堆来实现它。
我知道,使用任何一种数据结构以最佳的启发式成本(即最小的成本)来组织扩展的拼图状态会很有用。
从3x3矩阵开始(使用数组实现)
Puzzle *current=new Puzzle(initialState, goalState);
使用以下方法创建每个新的拼图状态(一个对象):
Puzzle *next=(current->moveDown()); Puzzle *next=(current->moveRight()); Puzzle *next=(current->moveUp()); Puzzle *next=(current->moveRight());
我想将
.push(next)
放入(Puzzle*
的(最小)优先级队列或堆,根据next->FCost
排序。]
一般来说,有没有一种方法可以使用这些STL数据结构中的任何一个来包含指向对象的指针-按针对每个对象的成员变量(FCost)排序?
我正在努力实现最佳优先搜索算法,以解决作业的8难题问题。根据要求,必须使用(最小)优先级队列或位于堆中的方法来实现它...
是,您可以为priority_queue指定自定义比较功能>
auto cmp = [](Puzzle* a, Puzzle* b) {
return a->FCost > b->FCost;
};
std::priority_queue<Puzzle*, std::vector<Puzzle*>, decltype(cmp)> queue(cmp);