也许这是一个愚蠢的问题,但我正在尝试使用BGL的
dijkstra_shortest_paths
算法,并且特别是想使用我的边捆绑属性的一个字段作为权重图。目前我的尝试导致编译器错误的页数达到了十几页,所以我希望有人能帮助我。以下是我的代码示例:struct GraphEdge {
float length;
// other cruft
};
struct GraphVertex {
...
};
typedef boost::adjacency_list
<boost::vecS, boost::vecS, boost::directedS,
GraphVertex, GraphEdge> GraphType;
我可以轻松地填充图表,但是在调用dijkstra_shortest_paths
时遇到了麻烦。我想使用length
字段。具体来说,我想知道在这样的调用中需要什么样的boost voodoo技巧:
GraphType m_graph;
vector<int> predecessor(num_vertices(m_graph));
vector<float> distances(num_vertices(m_graph), 0.0f);
vector<int> vertex_index_map(num_vertices(m_graph));
for (size_t i=0; i<vertex_index_map.size(); ++i) {
vertex_index_map[i] = i;
}
dijkstra_shortest_paths(m_graph, vertex_from, predecessor, distances,
weightmap, vertex_index_map,
std::less<float>(), closed_plus<float>(),
(std::numeric_limits<float>::max)(), 0.0f,
default_dijkstra_visitor());
// How do I write the right version of weightmap here?
需要让weightmap将我的图形的特定边与属性中相应的length
字段相关联。我相信有一种简单的方法可以做到这一点,但BGL的文档对我来说非常晦涩难懂。如果您能告诉我在文档的哪个部分描述了示例,我也会非常高兴。
提前感谢您!