Ich arbeite an der Pfadfindung für ein 2D-Spiel. Ich habe this similar answer gefunden, aber ich bin mir nicht sicher, wie man den Vergleichsoperator erstellt, wenn heap compares i <> i+i
, wenn i need manhattan(i) <> manhattan(i+1)?
ich mit cpp wahnsinnig rostig bin, so gehen Sie einfach auf mich.Heap-Vergleich zwischen Objekt und statischer Position
typedef std::tuple<int, int> coord;
int manhattan(coord start, coord goal){
return (std::abs(start.get<0> - goal.get<0>) + \
std::abs(start.get<1> - goal.get<1>))
}
bool operator()((const coord& left, const coord& right){
return manhattan(left, ???) < manhattan(right, ???);
}
vector pathfinding(coord start, coord goal){
//using A* format
vector<coord> open;
while(open){
//how can I compare indexes to goal parameter?
std::sort_heap(open.begin(), open.end());
current = open.front();
}
}
Vielen Dank, das war eine super hilfreiche Nachverfolgung einer Erklärung. Und ich habe mir diese Dokumentation angesehen, aber ich sehe keinen Grund, warum ich nicht einfach sort_heap verwenden und die Push/Pops vermeiden kann? – Tony
Wie drücken/knallen Sie Werte auf/aus dem Heap? – qxz
Ich habe den letzten Teil meiner Antwort bearbeitet – qxz