Repository navigation
Expand file tree
/
Copy pathRandomGraphGenerator.py
More file actions
60 lines (51 loc) · 2.32 KB
/
Copy pathRandomGraphGenerator.py
File metadata and controls
60 lines (51 loc) · 2.32 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
from Graph import Graph
import random
class RandomGraphGenerator:
def __init__(self):
pass
def generate(self, inputGraph):
randomGraph = Graph(directed=inputGraph.getDirected())
degreeSequenceVector = inputGraph.getDegreeSequence()
indegreeSeqVector = None
if inputGraph.getDirected():
degreeSequenceVector = [len(lst) for lst in inputGraph.getFrom().values()]
indegreeSeqVector = [len(lst) for lst in inputGraph.getTo().values()]
vertexList = []
inVertexList = []
" generate randomized list of vertices"
for vertex in range(inputGraph.getNumberofVertices()):
if vertex < len(degreeSequenceVector):
for degree in range(degreeSequenceVector[vertex]):
vertexList.append(vertex)
if inputGraph.getDirected():
if vertex < len(indegreeSeqVector):
for degree in range(indegreeSeqVector[vertex]):
inVertexList.append(vertex)
random.shuffle(vertexList)
if inputGraph.getDirected():
random.shuffle(inVertexList)
" create edges "
while len(vertexList) > 0:
if inputGraph.getDirected():
u = random.randrange(0, len(vertexList))
v = random.randrange(0, len(inVertexList))
edgeVertexU = vertexList[u]
edgeVertexV = inVertexList[v]
vertexList = vertexList[:u] + vertexList[u + 1:]
inVertexList = inVertexList[:v] + inVertexList[v + 1:]
randomGraph.addEdge([edgeVertexU, edgeVertexV])
else:
u = random.randrange(0, len(vertexList))
v = random.randrange(0, len(vertexList))
while v == u:
v = random.randrange(0, len(vertexList))
if u > v:
temp = u
u = v
v = temp
edgeVertexU = vertexList[u]
edgeVertexV = vertexList[v]
vertexList = vertexList[:v] + vertexList[v + 1:]
vertexList = vertexList[:u] + vertexList[u + 1:]
randomGraph.addEdge([edgeVertexV, edgeVertexU])
return randomGraph