BFS-> uses queue
DFS-> uses stack or recursion (less code)
NOTE: same idea algo wise for both
IDEA:1 declare the DS(if bfs-DS will be queue,if dfs-stack)2 push the start node to DS
3 when you push you mark it as visited
4 until the DS isnot empty run a loop
5 inside loop pop the DS(deque for queue or pop for stack)and save it in a new object actual
6 loop through the neighbors of actual
7if the current neighbor n isnot visited
8 then push n in DS
9 mark n as visited in the next line.
# Depth First Search: DFS Algorithm# 1) Pick any node. # 2) If it is unvisited, mark it as visited and recur on all its # adjacent (neighbours) nodes. # 3) Repeat until all the nodes are visited
graph={'A':['B','C'],'B':['D','E'],'C':['F'],'D':[],'E':['F'],'F':[]}
visited =set()# Set to keep track of visited nodes of graph.defdfs(visited, graph, node):#function for dfs if node notin visited:'''
We start with A
Then B
Then D
Then E
Then F
Then C
A -> B -> D -> E -> F -> C
'''print(node)# added to visited to avoid visit the node twice
visited.add(node)for neighbour in graph[node]:'''
* Neighbour of A : B and C but first visit B
* Then neighbour of B : D and E but first visit D
* Then neighbour of D : doesn't have neighbour then backtrack to the neighbour
of the previous node (B) which is E
* Then neighbour of E : F
* Then neighbour of F : doesn't have neighbour then backtrack to the neighbour
of the previous node E but doesn't have other neighbour except F which is visited
So backtracking again to B and B also doesn't have nodes not visited
So backtracking again to A: C not visited YAY!
'''
dfs(visited, graph, neighbour)print(dfs(visited, graph,'A'))