6
6
URL: https://en.wikipedia.org/wiki/Random_graph
7
7
"""
8
8
9
- import numpy as np
9
+ import random
10
10
11
11
12
12
def random_graph (
@@ -16,33 +16,33 @@ def random_graph(
16
16
Function that generates a random graph
17
17
@input: vertices_number (number of vertices),
18
18
probability (probability that a generic edge (u,v) exists),
19
- directed (if True: g will be a directed graph,
19
+ directed (if True: graph will be a directed graph,
20
20
otherwise it will be an undirected graph)
21
21
@examples:
22
22
>>> random_graph(4, 1)
23
23
{0: [1, 2, 3], 1: [0, 2, 3], 2: [0, 1, 3], 3: [0, 1, 2]}
24
24
>>> random_graph(4, 1, True)
25
25
{0: [1, 2, 3], 1: [0, 2, 3], 2: [0, 1, 3], 3: [0, 1, 2]}
26
26
"""
27
- g = dict ( zip ( range ( vertices_number ), [[ ] for _ in range (vertices_number )]))
27
+ graph = { i : [ ] for i in range (vertices_number )}
28
28
29
29
# if probability is greater or equal than 1, then generate a complete graph
30
30
if probability >= 1 :
31
31
return complete_graph (vertices_number )
32
32
# if probability is lower or equal than 0, then return a graph without edges
33
33
if probability <= 0 :
34
- return g
34
+ return graph
35
35
36
36
# for each couple of nodes, add an edge from u to v
37
37
# if the number randomly generated is greater than probability probability
38
38
for i in range (vertices_number ):
39
39
for j in range (i + 1 , vertices_number ):
40
- if np . random .random () < probability :
41
- g [i ].append (j )
40
+ if random .random () < probability :
41
+ graph [i ].append (j )
42
42
if not directed :
43
43
# if the graph is undirected, add an edge in from j to i, either
44
- g [j ].append (i )
45
- return g
44
+ graph [j ].append (i )
45
+ return graph
46
46
47
47
48
48
def complete_graph (vertices_number : int ) -> dict :
@@ -54,13 +54,9 @@ def complete_graph(vertices_number: int) -> dict:
54
54
>>> print(complete_graph(3))
55
55
{0: [1, 2], 1: [0, 2], 2: [0, 1]}
56
56
"""
57
- g = {}
58
- for i in range (vertices_number ):
59
- g [i ] = []
60
- for j in range (0 , vertices_number ):
61
- if i != j :
62
- g [i ].append (j )
63
- return g
57
+ return {
58
+ i : [j for j in range (vertices_number ) if i != j ] for i in range (vertices_number )
59
+ }
64
60
65
61
66
62
if __name__ == "__main__" :
0 commit comments