Я работаю над реализацией алгоритма поиска пути A * с использованием std::priority_queue
, но он не работает должным образом.Я создал быстрый макет, чтобы увидеть, была ли проблема, поскольку очередь находится внутри класса.Не былоTt работал нормально.
У меня есть std::priority_queue
, класса SNode
, внутри класса AStarPrioQ
.У узлов есть метод сортировки:
struct OverLoad
{
bool operator() (const SNode& lhs, const SNode& rhs) const
{
return (lhs.f > rhs.f);
}
};
priority_queue<SNode, vector<SNode>, OverLoad > wSet;
Я хочу отсортировать это в порядке возрастания на основе свойства SNode::f
.f
рассчитывается только с использованием SNode::CalcF(SNode goalPosition)
непосредственно перед отправкой в очередь.
Я добавляю это в очередь следующим образом:
for (int i = 4; i < 8; i++)
{
tempPos = tempHead;
if (ValidMove(&tempPos, i))
{
tempPos.pathLength += 14;
tempPos.CalcF(goalPos);
wSet.push(tempPos);
}
}
ValidMove
генерирует перемещение на основев направлении i
и возвращает true
, если оно действительно.tempHead
выталкивается из очереди в начале большего цикла while.
Я понятия не имею, почему я продолжаю получать ошибку Invalid Heap , хотя, похоже, она появляется, когда всяочередь имеет значения, равные f
.
Надеюсь, я объяснил это достаточно хорошо.Если нет, я могу загрузить проект со всеми несвязанными файлами.