【问题标题】:Boost:: Dijkstra Shortest Path, how to get vertice index from path iterator?Boost:: Dijkstra Shortest Path,如何从路径迭代器中获取顶点索引?
【发布时间】:2012-04-23 23:45:04
【问题描述】:

在你开始阅读之前,为了帮助你理解我的问题,我告诉你我已经从这个链接复制了代码: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 等)的所有信息。

现在,当使用链接中的代码 sn-p 时,我已经这样做了:

// 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;
        }
    }
} 

但这只是崩溃..

【问题讨论】:

    标签: c++ boost dijkstra boost-graph


    【解决方案1】:

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

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

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

    【讨论】:

    • 谢谢,最后我得到了(vi, source(*pathIterator, dgraph)),效果很好!
    猜你喜欢
    • 2023-03-04
    • 2011-05-12
    • 2015-04-03
    • 1970-01-01
    • 2012-09-20
    • 1970-01-01
    • 2015-05-19
    • 1970-01-01
    • 2018-08-19
    相关资源
    最近更新 更多