在你开始阅读之前,为了帮助你理解我的问题,我告诉你我已经从这个链接复制了代码:Dijkstra Shortest Path with VertexList = ListS in boost graph
所以.. 我正在重写我的程序代码以使用 boost,但现在当 99% 准备就绪时,我被我的 GPS 卡住了(用于游戏)。 我有一个节点列表,我以一种很容易转换为 boost 方法的方式添加了这些节点。我需要做的就是像这样创建一个顶点变量:
Vertex Vx[MAX_NODES];
我从我提供的链接中复制了 typedef。
我添加顶点的方式是这样的:
stringstream s;
s << i;
Vx[i] = add_vertex(s.str(),dgraph);
其中“i”等于整数。 (例如 int i = 9)
而且eges也很容易添加。现在,我有自己的结构化数组,称为“xNode”。例如: xNode[i] 包含节点的 X Y Z 位置(xNode[i].X xNode[i].Y 等)的所有信息。
现在,当使用链接中的代码片段时,我已经这样做了:
// Write shortest path
std::cout << "Shortest path from " << startid << " to " << endid << ":" << std::endl;
float totalDistance = 0;
for(PathType::reverse_iterator pathIterator = path.rbegin(); pathIterator != path.rend(); ++pathIterator)
{
std::cout << source(*pathIterator, dgraph) << " -> " << target(*pathIterator, dgraph)
<< " = " << get( boost::edge_weight, dgraph, *pathIterator ) << std::endl;
}
这就是我卡住的地方,因为“source(*pathIterator, dgraph)”和“target(*pathIterator, dgraph)” "获取地址,但我需要顶点索引来访问 xNode[i],i 是 NodeID(或者顶点 ID | Vx[i])。 我该怎么做?
编辑: 我尝试这样做:
for(PathType::reverse_iterator pathIterator = path.rbegin(); pathIterator != path.rend(); ++pathIterator)
{
for(int i = 0; i < MAX_NODES; ++i)
{
if(source(*pathIterator, dgraph) == *((Vertex*)Vx[i]))
{
cout << " " << i << " " << endl;
break;
}
}
}
但这只是崩溃..
最佳答案
随着 typedef
从那个问题开始,你可以使用 get(boost::vertex_index, dgraph, v)
获取 v
的索引.您还可以使用以下方法缓存属性映射:
IndexMap vi = get(boost::vertex_index, dgraph);
然后使用 get(vi, v)
获取 v
的索引.
关于c++ - Boost::Dijkstra 最短路径,如何从路径迭代器获取顶点索引?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10109862/