Boost :: Dijkstra Shortest Path,如何从路径迭代器获取顶点索引?

时间:2012-04-11 16:16:14

标签: c++ boost dijkstra boost-graph

在您开始阅读之前,为了帮助您了解我的问题,我告诉我已复制此链接中的代码: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],我是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;
        }
    }
} 

但这只是崩溃..

1 个答案:

答案 0 :(得分:3)

使用该问题的typedef,您可以使用get(boost::vertex_index, dgraph, v)获取v的索引。您还可以使用以下方法缓存属性映射:

IndexMap vi = get(boost::vertex_index, dgraph);

然后使用get(vi, v)获取v的索引。