当前位置: 首页>>代码示例>>C++>>正文


C++ PathNode::F方法代码示例

本文整理汇总了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;
}
开发者ID:engineer-murataydin,项目名称:Kunstmatige-Inelligentie-KMINT-,代码行数:64,代码来源:Graph.cpp


注:本文中的PathNode::F方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。