本文整理汇总了C++中PathNode::F方法的典型用法代码示例。如果您正苦于以下问题:C++ PathNode::F方法的具体用法?C++ PathNode::F怎么用?C++ PathNode::F使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类PathNode
的用法示例。
在下文中一共展示了PathNode::F方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: PathNode
stack<Node*> Graph::CreatePath(Node* from, Node* to)
{
map<Node*, PathNode*> openList;
map<Node*, PathNode*> closedList;
openList[from] = new PathNode(from, 0, 0, NULL);
while (!openList.empty())
{
PathNode* pathNode = openList.begin()->second;
int value = pathNode->F();
for (auto iterator = openList.begin(); iterator != openList.end(); iterator++)
{
if (value > iterator->second->F())
{
value = iterator->second->F();
pathNode = iterator->second;
}
}
Node* node = pathNode->node;
for (int i = 0; i < node->edges.size(); i++)
{
Node* foundNode = node->edges[i]->getOtherNode(node);
if (closedList.find(foundNode) == closedList.end())
{
map<Node*, PathNode*>::iterator found = openList.find(foundNode);
if (found != openList.end())
{
if (pathNode->F() > found->second->F())
{
found->second->g = pathNode->g + node->edges[i]->cost;
found->second->from = pathNode;
}
}
else
{
openList[foundNode] = new PathNode(foundNode,
pathNode->g + node->edges[i]->cost,
Utill::distanceBewteenPoints(foundNode->x, foundNode->y, to->x, to->y),
pathNode);
}
}
}
openList.erase(node);
closedList[node] = pathNode;
if (pathNode->node == to)
{
break;
}
}
PathNode* nodeInPath = closedList.find(to)->second;
stack<Node*> path;
while (nodeInPath->from)
{
path.push(nodeInPath->node);
nodeInPath = nodeInPath->from;
}
return path;
}