1
+ class Vertex :
2
+ def __init__ (self , n ):
3
+ self .name = n
4
+ self .neighbors = list ()
5
+
6
+ self .distance = 9999
7
+ self .color = 'black'
8
+
9
+ def add_neighbor (self , v ):
10
+ if v not in self .neighbors :
11
+ self .neighbors .append (v )
12
+ self .neighbors .sort ()
13
+
14
+ class Graph :
15
+ vertices = {}
16
+
17
+ def add_vertex (self , vertex ):
18
+ if isinstance (vertex , Vertex ) and vertex .name not in self .vertices :
19
+ self .vertices [vertex .name ] = vertex
20
+ return True
21
+ else :
22
+ return False
23
+
24
+ def add_edge (self , u , v ):
25
+ if u in self .vertices and v in self .vertices :
26
+ for key , value in self .vertices .items ():
27
+ if key == u :
28
+ value .add_neighbor (v )
29
+ if key == v :
30
+ value .add_neighbor (u )
31
+ return True
32
+ else :
33
+ return False
34
+
35
+ def print_graph (self ):
36
+ for key in sorted (list (self .vertices .keys ())):
37
+ print (key + str (self .vertices [key ].neighbors ) + " " + str (self .vertices [key ].distance ))
38
+
39
+ def bfs (self , vert ):
40
+ q = list ()
41
+ vert .distance = 0
42
+ vert .color = 'red'
43
+ for v in vert .neighbors :
44
+ self .vertices [v ].distance = vert .distance + 1
45
+ q .append (v )
46
+
47
+ while len (q ) > 0 :
48
+ u = q .pop (0 )
49
+ node_u = self .vertices [u ]
50
+ node_u .color = 'red'
51
+
52
+ for v in node_u .neighbors :
53
+ node_v = self .vertices [v ]
54
+ if node_v .color == 'black' :
55
+ q .append (v )
56
+ if node_v .distance > node_u .distance + 1 :
57
+ node_v .distance = node_u .distance + 1
58
+
59
+ g = Graph ()
60
+ a = Vertex ('A' )
61
+ g .add_vertex (a )
62
+ g .add_vertex (Vertex ('B' ))
63
+ for i in range (ord ('A' ), ord ('K' )):
64
+ g .add_vertex (Vertex (chr (i )))
65
+
66
+ edges = ['AB' , 'AE' , 'BF' , 'CG' , 'DE' , 'DH' , 'EH' , 'FG' , 'FI' , 'FJ' , 'GJ' , 'HI' ]
67
+ for edge in edges :
68
+ g .add_edge (edge [:1 ], edge [1 :])
69
+
70
+ g .bfs (a )
71
+ g .print_graph ()
0 commit comments