from collections import defaultdict #--class for directed graph with adjacency list representation class Graph: #--Constructor of the class def __init__(self): #--default dictionary to store graph self.graph = defaultdict(list) ''' --function to add an edge --inputs, starting point of the graph ''' def addEdge(self,u,v): self.graph[u].append(v) ''' --to print a BFS of graph --inputs, starting point of the graph --Prints the BFS starting from the input point ''' def BFS(self, s): # Mark all the vertices as not visited visited = [False] * (len(self.graph)) queue = [] # Mark the source node as visited and enqueue it queue.append(s) visited[s] = True while queue: s = queue.pop(0) print (s, end = " ") for i in self.graph[s]: if visited[i] == False: queue.append(i) visited[i] = True