edge_index ноль для всех ребер?
Определяя мой boost::graph
подобно следующему, я получаю нулевые индексы ребер для всех ребер. Зачем? Что я делаю неправильно?
#include <iostream>
#include <boost/graph/adjacency_list.hpp>
int main() {
typedef boost::adjacency_list<boost::vecS, boost::vecS, boost::directedS, boost::no_property, boost::property<boost::edge_index_t, std::size_t> > Graph;
typedef boost::graph_traits<Graph>::edge_descriptor Edge;
Graph g(3);
Edge e1 = boost::add_edge(0, 1, g).first;
Edge e2 = boost::add_edge(1, 2, g).first;
Edge e3 = boost::add_edge(2, 0, g).first;
boost::property_map<Graph, boost::edge_index_t>::type eim = boost::get(boost::edge_index, g);
size_t e1n = eim[e1],
e2n = eim[e2],
e3n = eim[e3];
return 0;
}
Насколько я могу судить из документации и примеров, это должно работать.
1 ответ
Решение
Смежный список не имеет индекса ребра, а только индекс вершины. Что вполне логично, если подумать, как хранится график.
Чтобы иметь индекс ребра, вам нужно вручную добавить его в описание графа, а затем вручную обработать его.