Mungkin ini pertanyaan bodoh, tapi saya mencoba menggunakan dijkstra_shortest_paths
BGL, dan, khususnya, menggunakan bidang properti bundel Edge saya sebagai peta bobot. Upaya saya saat ini telah menghasilkan puluhan halaman kesalahan kompiler, jadi saya berharap ada yang tahu cara membantu saya. Pada dasarnya seperti inilah kode saya:
struct GraphEdge {
float length;
// other cruft
};
struct GraphVertex {
...
};
typedef boost::adjacency_list
<boost::vecS, boost::vecS, boost::directedS,
GraphVertex, GraphEdge> GraphType;
Saya dapat mengisi grafik tanpa masalah, namun saat harus menelepon dijkstra_shortest_paths
, saya mendapat masalah. Saya ingin menggunakan bidang length
. Secara khusus, saya ingin tahu apa saja peningkatan voodoo yang dibutuhkan agar sesuai dengan panggilan seperti ini:
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?
sedemikian rupa sehingga peta bobot entah bagaimana akan mengaitkan tepi tertentu dari grafik saya dengan bidang length
yang sesuai di properti. Saya yakin ada cara mudah untuk melakukan ini, tetapi dokumentasi untuk BGL sangat tidak jelas bagi saya. Jika Anda dapat memberi tahu saya di mana contoh tersebut dijelaskan dalam dokumentasi, saya juga akan sangat senang.
Terima kasih sebelumnya!