一种带有Boost Graph库的菜鸟:

鉴于我已经捆绑了顶点和边缘,如下所示:

struct MarkerVertex{
    MarkerID id;
};

struct RelationshipEdge{
    float weight; 
    //there's other things in here too
    //this is the only part that's relevant
};

和这样的图形描述符:

typedef boost::adjacency_list<
boost::vecS, boost::vecS, boost::undirectedS,
MarkerVertex, RelationshipEdge>
Graph_t;

我用以下方式调用dijkstra的最短路径:

dijkstra_shortest_paths(m_graph, startDescriptor,
                            weight_map(get(&RelationshipEdge::weight, m_graph))
                                .distance_map(make_iterator_property_map(distances.begin(),
                                                                     get(boost::vertex_index, m_graph))));

使用 RelationshipEdge struct的 weight 属性作为路径距离

然后我想从开始到每个节点遍历图形,并根据遍历中的前一个节点进行计算

例如

  • A-> B.

  • A-> C.

  • A-> C-> D.

  • A-> C-> E.

然后说我想把“A”分配给A - “AB”分配给B - “AC”分配给C - “ACD”分配给D - “ACE”分配给E

这只是一个例子,我实际上必须进行矩阵乘法,所以我不想从最后开始,因为我实际上必须在计算叶子之前计算先前的值 . 此外,一些顶点可能无法连接到起始顶点(可能很多)

从源节点走到其余节点并进行某种类似的计算会有什么提升语法?