2
0
mirror of https://github.com/boostorg/graph.git synced 2026-01-29 07:32:21 +00:00

Fixes and tweaks

[SVN r27703]
This commit is contained in:
Douglas Gregor
2005-03-16 14:15:25 +00:00
parent 0e0507520b
commit 0d9a96fec4
3 changed files with 48 additions and 7 deletions

View File

@@ -7,6 +7,7 @@
// Authors: Douglas Gregor
// Andrew Lumsdaine
#include "basic_graph.hpp"
#include <boost/graph/iteration_macros.hpp>
namespace boost {
@@ -129,7 +130,11 @@ basic_graph<DirectedS>::basic_graph(const std::string& filename,
template<typename DirectedS>
basic_graph<DirectedS>::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<typename DirectedS>
basic_graph<DirectedS>::basic_graph(power_law_out_degree plod, int seed)
@@ -137,13 +142,19 @@ basic_graph<DirectedS>::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<typename DirectedS>
basic_graph<DirectedS>::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<DirectedS> concept
@@ -489,6 +500,28 @@ basic_graph<DirectedS>::edges() const
return std::make_pair(edges_begin(), edges_end());
}
template<typename DirectedS>
void basic_graph<DirectedS>::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<typename DirectedS>
void basic_graph<DirectedS>::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<typename Graph> void export_in_graph();
template<typename DirectedS>
@@ -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)

View File

@@ -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<vertex_descriptor> index_to_vertex;
std::vector<edge_descriptor> index_to_edge;
dynamic_properties dp;

View File

@@ -27,8 +27,12 @@ basic_graph<DirectedS>::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<std::string>("node_id"));
if (has_vertex_map(node_id))
boost::write_graphviz(out, *this, dp, node_id,
get_vertex_map<std::string>(node_id));
else
boost::write_graphviz(out, *this, dp, node_id, get_vertex_index_map());
}
// Explicit instantiations