diff --git a/src/python/basic_graph.cpp b/src/python/basic_graph.cpp index 0934e92d..4079255b 100644 --- a/src/python/basic_graph.cpp +++ b/src/python/basic_graph.cpp @@ -7,6 +7,7 @@ // Authors: Douglas Gregor // Andrew Lumsdaine #include "basic_graph.hpp" +#include namespace boost { @@ -129,7 +130,11 @@ basic_graph::basic_graph(const std::string& filename, template basic_graph::basic_graph(erdos_renyi er, int seed) : stored_minstd_rand(seed), - inherited(er_iterator(this->gen, er.n, er.p), er_iterator(), er.n) { } + inherited(er_iterator(this->gen, er.n, er.p), er_iterator(), er.n) +{ + renumber_vertices(); + renumber_edges(); +} template basic_graph::basic_graph(power_law_out_degree plod, int seed) @@ -137,13 +142,19 @@ basic_graph::basic_graph(power_law_out_degree plod, int seed) inherited(sf_iterator(this->gen, plod.n, plod.alpha, plod.beta), sf_iterator(), plod.n) -{ } +{ + renumber_vertices(); + renumber_edges(); +} template basic_graph::basic_graph(small_world sw, int seed) : stored_minstd_rand(seed), inherited(sw_iterator(this->gen, sw.n, sw.k, sw.p), sw_iterator(), sw.n) -{ } +{ + renumber_vertices(); + renumber_edges(); +} // ---------------------------------------------------------- // Incidence basic_graph concept @@ -489,6 +500,28 @@ basic_graph::edges() const return std::make_pair(edges_begin(), edges_end()); } +template +void basic_graph::renumber_vertices() +{ + using boost::vertices; + + BGL_FORALL_VERTICES_T(v, base(), inherited) { + put(vertex_index, base(), v, index_to_vertex.size()); + index_to_vertex.push_back(v); + } +} + +template +void basic_graph::renumber_edges() +{ + using boost::edges; + + BGL_FORALL_EDGES_T(e, base(), inherited) { + put(edge_index, base(), e, index_to_edge.size()); + index_to_edge.push_back(e); + } +} + template void export_in_graph(); template @@ -551,7 +584,7 @@ void export_basic_graph(const char* name) .def("get_vertex_object_map", &Graph::get_vertex_object_map) .def("get_vertex_point2d_map", &Graph::get_vertex_point2d_map) // Edge property maps - .def("has_edge_map", &Graph::has_vertex_map) + .def("has_edge_map", &Graph::has_edge_map) .def("get_edge_index_map", &Graph::get_edge_index_map) .def("get_edge_color_map", &Graph::get_edge_color_map) .def("get_edge_double_map", &Graph::get_edge_double_map) diff --git a/src/python/basic_graph.hpp b/src/python/basic_graph.hpp index f2b58969..16bd4ce7 100644 --- a/src/python/basic_graph.hpp +++ b/src/python/basic_graph.hpp @@ -348,7 +348,11 @@ class basic_graph inherited& base() { return *this; } const inherited& base() const { return *this; } - private: +protected: + void renumber_vertices(); + void renumber_edges(); + +private: std::vector index_to_vertex; std::vector index_to_edge; dynamic_properties dp; diff --git a/src/python/graphviz.cpp b/src/python/graphviz.cpp index de4ee012..77db2404 100644 --- a/src/python/graphviz.cpp +++ b/src/python/graphviz.cpp @@ -27,8 +27,12 @@ basic_graph::write_graphviz(const std::string& filename, const std::string& node_id) { std::ofstream out(filename.c_str()); - boost::write_graphviz(out, *this, dp, node_id, - get_vertex_map("node_id")); + + if (has_vertex_map(node_id)) + boost::write_graphviz(out, *this, dp, node_id, + get_vertex_map(node_id)); + else + boost::write_graphviz(out, *this, dp, node_id, get_vertex_index_map()); } // Explicit instantiations