|
@ -0,0 +1,63 @@ |
|
|
|
|
|
# Python3 Program to print BFS traversal |
|
|
|
|
|
|
|
|
|
|
|
from collections import defaultdict |
|
|
|
|
|
|
|
|
|
|
|
# This class represents a directed graph |
|
|
|
|
|
# using adjacency list representation |
|
|
|
|
|
class Graph: |
|
|
|
|
|
|
|
|
|
|
|
# Constructor |
|
|
|
|
|
def __init__(self): |
|
|
|
|
|
|
|
|
|
|
|
# default dictionary to store graph |
|
|
|
|
|
self.graph = defaultdict(list) |
|
|
|
|
|
|
|
|
|
|
|
# function to add an edge to graph |
|
|
|
|
|
def addEdge(self,u,v): |
|
|
|
|
|
self.graph[u].append(v) |
|
|
|
|
|
|
|
|
|
|
|
# Function to print a BFS of graph |
|
|
|
|
|
def BFS(self, s): |
|
|
|
|
|
|
|
|
|
|
|
# Mark all the vertices as not visited |
|
|
|
|
|
visited = [False] * (len(self.graph)) |
|
|
|
|
|
|
|
|
|
|
|
# Create a queue for BFS |
|
|
|
|
|
queue = [] |
|
|
|
|
|
|
|
|
|
|
|
# Mark the source node as |
|
|
|
|
|
# visited and enqueue it |
|
|
|
|
|
queue.append(s) |
|
|
|
|
|
visited[s] = True |
|
|
|
|
|
|
|
|
|
|
|
while queue: |
|
|
|
|
|
|
|
|
|
|
|
# Dequeue a vertex from |
|
|
|
|
|
# queue and print it |
|
|
|
|
|
s = queue.pop(0) |
|
|
|
|
|
print (s, end = " ") |
|
|
|
|
|
|
|
|
|
|
|
# Get all adjacent vertices of the |
|
|
|
|
|
# dequeued vertex s. If a adjacent |
|
|
|
|
|
# has not been visited, then mark it |
|
|
|
|
|
# visited and enqueue it |
|
|
|
|
|
for i in self.graph[s]: |
|
|
|
|
|
if visited[i] == False: |
|
|
|
|
|
queue.append(i) |
|
|
|
|
|
visited[i] = True |
|
|
|
|
|
|
|
|
|
|
|
# Driver code |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
g = Graph() |
|
|
|
|
|
g.addEdge(0, 1) |
|
|
|
|
|
g.addEdge(0, 2) |
|
|
|
|
|
g.addEdge(1, 2) |
|
|
|
|
|
g.addEdge(2, 0) |
|
|
|
|
|
g.addEdge(2, 3) |
|
|
|
|
|
g.addEdge(3, 3) |
|
|
|
|
|
|
|
|
|
|
|
print ("Following is Breadth First Traversal" |
|
|
|
|
|
" (starting from vertex 2)") |
|
|
|
|
|
g.BFS(2) |
|
|
|
|
|
|