icentral_graph/
create_random_connected.rs1crate::ix!();
2
3impl<GH> CreateRandomConnected for Graph<GH> {
4
5 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 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}