From 6d14ca427843545b94b91e9a9e554351007d5399 Mon Sep 17 00:00:00 2001 From: Jeremy Siek Date: Sun, 13 May 2001 14:10:16 +0000 Subject: [PATCH] added RandNumGen parameter to the random graph functions [SVN r10102] --- include/boost/graph/graph_utility.hpp | 30 +++++++++++++-------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/include/boost/graph/graph_utility.hpp b/include/boost/graph/graph_utility.hpp index 87f932b4..ca44ae6a 100644 --- a/include/boost/graph/graph_utility.hpp +++ b/include/boost/graph/graph_utility.hpp @@ -40,6 +40,8 @@ #include #include #include +#include +#include namespace boost { @@ -249,39 +251,37 @@ namespace boost { *__first++ = __value++; } - inline std::size_t random_number(std::size_t N) { - std::size_t ret = rand() % N; - return ret; - } - // grab a random vertex from the graph's vertex set - template + template typename graph_traits::vertex_descriptor - random_vertex(Graph& g) + random_vertex(Graph& g, RandomNumGen& gen) { - std::size_t n = random_number(num_vertices(g)); + uniform_int rand_gen(gen, 0, num_vertices(g)-1); + std::size_t n = rand_gen(); typename graph_traits::vertex_iterator i = vertices(g).first; while (n-- > 0) ++i; // std::advance not VC++ portable return *i; } - template + template typename graph_traits::edge_descriptor - random_edge(Graph& g) { - typename graph_traits::edges_size_type E = num_edges(g), n; - n = random_number(E); + random_edge(Graph& g, RandomNumGen& gen) { + uniform_int rand_gen(gen, 0, num_edges(g)-1); + typename graph_traits::edges_size_type + n = rand_gen(); typename graph_traits::edge_iterator i = edges(g).first; while (n-- > 0) ++i; // std::advance not VC++ portable return *i; } - template + template void generate_random_graph (MutableGraph& g, typename graph_traits::vertices_size_type V, typename graph_traits::vertices_size_type E, + RandNumGen& gen, bool self_edges = false) { typedef graph_traits Traits; @@ -293,9 +293,9 @@ namespace boost { add_vertex(g); for (e_size_t j = 0; j < E; ++j) { - vertex_descriptor a = random_vertex(g), b; + vertex_descriptor a = random_vertex(g, gen), b; do { - b = random_vertex(g); + b = random_vertex(g, gen); } while (self_edges == false && a == b); add_edge(a, b, g); }