Возможно, это глупый вопрос, но я пытаюсь использовать dijkstra_shortest_paths
BGL и, в частности, использовать поле моего связанного свойства Edge в качестве карты весов. Мои попытки в настоящее время привели к десяткам страниц ошибок компилятора, поэтому я надеюсь, что кто-то знает, как мне помочь. Вот как выглядит мой код:
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
. В частности, я хотел бы знать, что нужно для повышения вуду, чтобы соответствовать такому вызову:
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?
таким образом, карта весов каким-то образом свяжет конкретное ребро моего графика с соответствующим полем length
в свойстве. Я уверен, что есть простой способ сделать это, но документация по BGL для меня невероятно непрозрачна. Если подскажете, где в документации описан пример, тоже буду очень рад.
Заранее спасибо!