Boost:: Dijkstra 最短路径,如何从路径迭代器获取顶点索引

Boost:: Dijkstra Shortest Path, how to get vertice index from path iterator?

本文关键字:迭代器 路径 获取 顶点 索引 Dijkstra 最短路径 Boost      更新时间:2023-10-16

在您开始阅读之前,为了帮助您理解我的问题,我告诉我已经从以下链接复制了代码: Dijkstra 最短路径与顶点列表 = 提升图中的列表

所以。。我正在重写我的程序代码以使用 boost,但现在当 99% 准备就绪时,我被困在 GPS(用于游戏)上。我有一个节点列表,幸运的是,我以一种易于转换为 boost 方法的方式添加了它。我需要做的是创建一个这样的顶点变量:

Vertex Vx[MAX_NODES];

从我给出的链接中复制了 typedefs。

我添加顶点的方式是这样的:

            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 的索引。