# Python3 program to print DFS 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)
|
|
|
|
# A function used by DFS
|
|
def DFSUtil(self, v, visited):
|
|
|
|
# Mark the current node as visited
|
|
# and print it
|
|
visited[v] = True
|
|
print(v, end = ' ')
|
|
|
|
# Recur for all the vertices
|
|
# adjacent to this vertex
|
|
for i in self.graph[v]:
|
|
if visited[i] == False:
|
|
self.DFSUtil(i, visited)
|
|
|
|
# The function to do DFS traversal. It uses
|
|
# recursive DFSUtil()
|
|
def DFS(self, v):
|
|
|
|
# Mark all the vertices as not visited
|
|
visited = [False] * (len(self.graph))
|
|
|
|
# Call the recursive helper function
|
|
# to print DFS traversal
|
|
self.DFSUtil(v, visited)
|
|
|
|
# Driver code
|
|
|
|
# Create a graph given
|
|
# in the above diagram
|
|
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 DFS from (starting from vertex 2)")
|
|
g.DFS(2)
|
|
|