Lesson 2 � Beginner

BFS & DFS: Traversal Patterns

Graph ko traverse karne ke 2 fundamental tarike hain � BFS (Breadth-First Search) aur DFS (Depth-First Search). Dono ka approach alag hai aur dono ke apne use cases hain.

? 20 min✓ Beginner✓ Graph Basics

BFS � Breadth-First Search

BFS graph ko level by level traverse karta hai. Pehle starting node ke sab neighbors, phir unke neighbors, aur so on.

Imagine karo tum ek building mein ho aur pehle poora floor cover karna hai, phir next floor. Yahi BFS hai.

Level 0: A
Level 1: B C
Level 2: D E

BFS order: A ✓ B ✓ C ✓ D ✓ E

Implementation: BFS mein queue use hota hai. Pehle node ko queue mein daalo, phir queue se nikalo, uske sab unvisited neighbors ko queue mein daalo.

from collections import deque

def bfs(graph, start):
 visited = set()
 queue = deque([start])
 visited.add(start)
 
 while queue:
 node = queue.popleft()
 print(node, end=' ')
 
 for neighbor in graph[node]:
 if neighbor not in visited:
 visited.add(neighbor)
 queue.append(neighbor)

DFS � Depth-First Search

DFS graph ko depth mein jaake traverse karta hai. Ek path ko poora explore karta hai, jab tak dead end na aa jaye, phir backtrack karta hai.

Jaise tum ek maze mein ho � seedha andar jaate jaao, jab rasta na mile toh wapas aao aur naya rasta try karo.

DFS path: A ✓ B ✓ D ? (backtrack) ✓ C ✓ E

DFS ek branch poora explore karta hai
phir next branch par jaata hai

Implementation: DFS mein stack ya recursion use hota hai.

def dfs_recursive(graph, node, visited=None):
 if visited is None:
 visited = set()
 visited.add(node)
 print(node, end=' ')
 
 for neighbor in graph[node]:
 if neighbor not in visited:
 dfs_recursive(graph, neighbor, visited)

def dfs_iterative(graph, start):
 visited = set()
 stack = [start]
 
 while stack:
 node = stack.pop()
 if node not in visited:
 visited.add(node)
 print(node, end=' ')
 for neighbor in graph[node]:
 if neighbor not in visited:
 stack.append(neighbor)

BFS vs DFS � Kab kya use karein?

Time & Space Complexity

Try it: code khud likho

Exercise: DFS ko iteratively implement karo (stack use karke). Starting node 'A' se start karo aur sab nodes ko visit karo.

graph = {
 'A': ['B', 'C'],
 'B': ['A', 'D'],
 'C': ['A', 'D'],
 'D': ['B', 'C']
}

Expected output: ['A', 'B', 'D', 'C'] ya koi valid DFS order.

Hint: Stack use karo. Pop karo, agar visited nahi hai toh mark karo aur print karo. Fir neighbors ko stack mein daalo.

Common mistakes

BFS aur DFS dono seekh liye✓ Ab Dijkstra's algorithm dekho � weighted graphs mein shortest path kaise nikalte hain.