本文整理汇总了C++中Coord::next方法的典型用法代码示例。如果您正苦于以下问题:C++ Coord::next方法的具体用法?C++ Coord::next怎么用?C++ Coord::next使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Coord
的用法示例。
在下文中一共展示了Coord::next方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: makeMap
bool PathFinder::makeMap(const Coord& start, Heuristic heur, EndCondition endCondition, Coord* end)
{
m_openSet.clear();
m_closedSet.clear();
std::priority_queue<DistNode> openQueue;
g_score(start) = 0;
h_score(start) = heur(start);
openQueue.push( DistNode( start, h_score(start) ) );
m_openSet.add(start);
while ( !openQueue.empty() )
{
DistNode dn = openQueue.top();
Coord c = dn.coord;
openQueue.pop();
if (g_score(c) + h_score(c) == dn.f_score)
{
// this entry in the queue is valid
assert(!m_closedSet.has(c));
if (endCondition(c))
{
*end = c;
return true;
}
m_openSet.remove(c);
m_closedSet.add(c);
unsigned int currentGScore = g_score(c);
for (int dir = 0; dir < 8; ++dir)
{
Coord next = c.next(dir);
if (m_closedSet.has(next) || !m_field.isPassable(next))
{
continue;
}
unsigned int newG = currentGScore + m_field.passingTime(c, dir);
bool newNode = false;
if (!m_openSet.has(next))
{
h_score(next) = heur(next);
m_openSet.add(next);
newNode = true;
}
if (newNode || newG < g_score(next))
{
g_score(next) = newG;
openQueue.push(DistNode(next, newG + h_score(next))); // may occur more than once, because we cannot remove the old one
}
}
}
}
return false;
}