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