2
0
mirror of https://github.com/boostorg/graph.git synced 2026-02-11 11:52:12 +00:00

added RandNumGen parameter to the random graph functions

[SVN r10102]
This commit is contained in:
Jeremy Siek
2001-05-13 14:10:16 +00:00
parent d2e2138c91
commit 6d14ca4278

View File

@@ -40,6 +40,8 @@
#include <boost/graph/properties.hpp>
#include <boost/pending/container_traits.hpp>
#include <boost/graph/depth_first_search.hpp>
#include <boost/random/mersenne_twister.hpp>
#include <boost/random/uniform_int.hpp>
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 <class Graph>
template <class Graph, class RandomNumGen>
typename graph_traits<Graph>::vertex_descriptor
random_vertex(Graph& g)
random_vertex(Graph& g, RandomNumGen& gen)
{
std::size_t n = random_number(num_vertices(g));
uniform_int<RandomNumGen> rand_gen(gen, 0, num_vertices(g)-1);
std::size_t n = rand_gen();
typename graph_traits<Graph>::vertex_iterator
i = vertices(g).first;
while (n-- > 0) ++i; // std::advance not VC++ portable
return *i;
}
template <class Graph>
template <class Graph, class RandomNumGen>
typename graph_traits<Graph>::edge_descriptor
random_edge(Graph& g) {
typename graph_traits<Graph>::edges_size_type E = num_edges(g), n;
n = random_number(E);
random_edge(Graph& g, RandomNumGen& gen) {
uniform_int<RandomNumGen> rand_gen(gen, 0, num_edges(g)-1);
typename graph_traits<Graph>::edges_size_type
n = rand_gen();
typename graph_traits<Graph>::edge_iterator
i = edges(g).first;
while (n-- > 0) ++i; // std::advance not VC++ portable
return *i;
}
template <typename MutableGraph>
template <typename MutableGraph, class RandNumGen>
void generate_random_graph
(MutableGraph& g,
typename graph_traits<MutableGraph>::vertices_size_type V,
typename graph_traits<MutableGraph>::vertices_size_type E,
RandNumGen& gen,
bool self_edges = false)
{
typedef graph_traits<MutableGraph> 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);
}