from collections import defaultdict, deque
#无向图 邻接表
class Graph:
def __init__(self):
self.graph = defaultdict(list)
def addEdge(self, u, v):
self.graph[u].append(v)
self.graph[v].append(u)
def DFSUtil(self, v, visited):
visited[v] = True
print(v, end=' ')
for neighbour in self.graph[v]:
if visited[neighbour] == False:
self.DFSUtil(neighbour, visited)
def DFS(self, v):
visited = defaultdict(bool)
self.DFSUtil(v, visited)
def BFSUtil(self, v, visited):
visited[v] = True
print(v, end=' ')
for neighbour in self.graph[v]:
if visited[neighbour] == False:
self.BFSUtil(neighbour, visited)
def BFS(self, s):
visited = defaultdict(bool)
queue = deque()
queue.append(s)
visited[s] = True
while queue:
s = queue.popleft()
self.BFSUtil(s, visited)
for neighbour in self.graph[s]:
if visited[neighbour] == False:
queue.append(neighbour)
visited[neighbour] = True
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("DFS :")
g.DFS(1)
print("\nBFS :")
g.BFS(2)