Я работаю над поиском путей для игры в 2D-плитки. Я нашел this similar answer, но я не уверен, как сделать создание оператора сравнения, когда heap compares i <> i+i
, когда i need manhattan(i) <> manhattan(i+1)?
Я безумно ржавый с cpp, так что легко на меня.Сравнение кучи объекта и статического положения
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();
}
}
Большое спасибо, это было очень полезное последующее объяснение. И я смотрел на эту документацию, но я не вижу причин, почему я не могу просто использовать sort_heap и избегать push/pops? – Tony
Как вы в настоящее время нажимаете/вставляете значения в кучу? – qxz
Я отредактировал последнюю часть своего ответа – qxz