icentral_graph/
create_random_connected.rs

1crate::ix!();
2
3impl<GH> CreateRandomConnected for Graph<GH> {
4
5    /// TODO: This is probably inefficient, but
6    /// maybe not that bad
7    ///
8    fn random_connected(n_vertices: usize, n_edges: usize) -> Self {
9
10        assert!(n_vertices < n_edges);
11
12        let mut rng = WyRand::new();
13
14        let graph_name = format!(
15            "random_graph_with_{}_vertices_and_{}_edges", 
16            n_vertices, 
17            n_edges
18        );
19
20        let mut graph = Graph::empty(&graph_name);
21
22        let mut nodes = vec![];
23
24        /// every node will at least show up once
25        for node_idx in 0..n_vertices {
26            nodes.push(node_idx);
27        }
28
29        for _ in n_vertices..n_edges {
30
31            let node_idx = rng.generate_range(0..n_vertices);
32
33            nodes.push(node_idx);
34        }
35
36        assert!(nodes.len() == n_edges);
37
38        let mut rng = rand::thread_rng();
39
40        nodes.shuffle(&mut rng);
41
42        for pair in nodes.windows(2) {
43
44            let rand_edge = Edge::new_with_ids(pair[0], pair[1]);
45
46            graph.insert_edge(&rand_edge);
47        }
48
49        graph
50    }
51}