8难题:按成员变量对包含对象指针的STL堆/优先级队列进行排序

问题描述 投票:1回答:1

我正在努力实现最佳优先搜索算法,以解决作业的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难题问题。根据要求,必须使用(最小)优先级队列或位于堆中的方法来实现它...

c++ stl sliding-tile-puzzle
1个回答
0
投票

是,您可以为priority_queue指定自定义比较功能>

auto cmp = [](Puzzle* a, Puzzle* b) { 
    return a->FCost > b->FCost;
};

std::priority_queue<Puzzle*, std::vector<Puzzle*>, decltype(cmp)> queue(cmp);
© www.soinside.com 2019 - 2024. All rights reserved.