1+ from Vertex import Vertex
2+ from Stack import Stack
3+
4+ class Graph :
5+ def __init__ (self , maxNumberOfVertices = 0 ):
6+ self .maxNumberOfVertices = maxNumberOfVertices
7+ self .vertices = [None ] * maxNumberOfVertices
8+ self .currentNumberOfVertices = 0
9+ self .adjacencyMatrix = [[0 for x in range (maxNumberOfVertices )] for y in range (maxNumberOfVertices )]
10+
11+ def addVertex (self , label ):
12+ vertex = Vertex (label , self .currentNumberOfVertices )
13+ self .vertices [self .currentNumberOfVertices ] = vertex
14+ self .adjacencyMatrix [self .currentNumberOfVertices ][self .currentNumberOfVertices ] = False
15+ self .currentNumberOfVertices += 1
16+
17+ def addEdge (self , start , end ):
18+ self .adjacencyMatrix [start ][end ] = True
19+ self .adjacencyMatrix [end ][start ] = True
20+
21+ def findNeigbour (self , vertex ):
22+ for j in range (self .currentNumberOfVertices ):
23+ if self .adjacencyMatrix [vertex .index ][j ] == True and self .vertices [j ].visited == False :
24+ return j
25+ return - 1
26+
27+ def breadthFirstSearch (self ):
28+ stack = Stack ()
29+ vertex = self .vertices [0 ]
30+ vertex .visited = True
31+ stack .push (vertex )
32+ while not stack .isEmpty ():
33+ currentVertex = stack .peek ()
34+ print ("Visiting : " + currentVertex .label )
35+ index = self .findNeigbour (currentVertex )
36+ if index != - 1 :
37+ self .vertices [index ].visited = True
38+ stack .push (self .vertices [index ])
39+ else :
40+ stack .pop ()
41+
42+ graph = Graph (10 )
43+
44+ graph .addVertex ("A" )
45+ graph .addVertex ("B" )
46+ graph .addVertex ("C" )
47+ graph .addVertex ("D" )
48+ graph .addVertex ("E" )
49+
50+ graph .addEdge (0 , 1 ) # AB
51+ graph .addEdge (0 , 2 ) # AC
52+ graph .addEdge (0 , 3 ) # AD
53+ graph .addEdge (1 , 2 ) # BC
54+ graph .addEdge (2 , 1 ) # CB
55+ graph .addEdge (2 , 4 ) # CE
56+ graph .addEdge (3 , 4 ) # DE
57+
58+ graph .breadthFirstSearch ()
0 commit comments