What if you could explore every path in a maze without ever getting lost or repeating steps?
Why DFS Depth First Search on Graph in DSA C++?
Imagine you have a huge maze with many paths and rooms. You want to find if there is a way to reach a certain room starting from the entrance. Trying to check every path by hand would be confusing and take forever.
Manually exploring each path can be slow and you might get lost or repeat the same paths again and again. It is easy to miss some rooms or waste time going back and forth without a clear plan.
Depth First Search (DFS) helps by exploring one path deeply before backtracking. It uses a simple rule to remember where it has been, so it never repeats or misses rooms. This makes searching fast and organized.
void search(int start) {
// Try all paths randomly
// No memory of visited rooms
// May repeat or miss rooms
}void dfs(int node) {
visited[node] = true;
for (int neighbor : graph[node]) {
if (!visited[neighbor]) dfs(neighbor);
}
}DFS enables efficient and complete exploration of all connected parts of a graph or maze without getting lost or repeating work.
Finding all friends connected to you in a social network by exploring friend connections deeply one by one.
Manual path checking is slow and confusing.
DFS explores deeply and remembers visited nodes.
DFS helps find all reachable nodes efficiently.
Practice
Solution
Step 1: Understand DFS traversal
DFS explores a graph by going deep into one branch before backtracking to explore other branches.Step 2: Compare with other traversal methods
BFS visits neighbors first, but DFS goes deep first, matching Explore as far as possible along each branch before backtracking.Final Answer:
Explore as far as possible along each branch before backtracking -> Option AQuick Check:
DFS = deep exploration first [OK]
- Confusing DFS with BFS
- Thinking DFS visits neighbors first
- Assuming DFS visits nodes by distance
Solution
Step 1: Check typical DFS function signature
Usually, DFS is called as dfs(node, visited, graph) where node is current node.Step 2: Match the correct order
dfs(0, visited, graph); matches the common order: dfs(0, visited, graph).Final Answer:
dfs(0, visited, graph); -> Option BQuick Check:
Call dfs with node first [OK]
- Swapping argument order
- Using uppercase DFS instead of dfs
- Passing graph before node
Graph adjacency list: 0: [1, 2] 1: [3] 2: [] 3: []Assuming DFS visits neighbors in ascending order.
Solution
Step 1: Start DFS at node 0
Visit 0, then explore neighbors in ascending order: 1, then 2.Step 2: Explore neighbor 1
From 1, visit 3 (only neighbor), then backtrack.Step 3: Explore neighbor 2
Node 2 has no neighbors, so visit and backtrack.Final Answer:
[0, 1, 3, 2] -> Option CQuick Check:
DFS order = 0,1,3,2 [OK]
- Visiting node 2 before node 1
- Not backtracking properly
- Confusing BFS order with DFS
void dfs(int node, vector<bool> &visited, vector &graph) {
visited[node] = true;
for (int i = 0; i < graph[node].size(); i++) {
int neighbor = graph[node][i];
if (visited[neighbor] = false) {
dfs(neighbor, visited, graph);
}
}
}Solution
Step 1: Check the if condition inside the loop
The condition uses '=' which assigns false instead of comparing.Step 2: Understand the impact of assignment in condition
This causes the condition to always be false, so DFS won't recurse properly.Final Answer:
The condition 'if (visited[neighbor] = false)' uses assignment instead of comparison -> Option DQuick Check:
Use '==' for comparison, not '=' [OK]
- Using '=' instead of '==' in conditions
- Loop boundary off-by-one errors
- Passing visited by value causing no effect
Solution
Step 1: Understand counting reachable nodes
Counting nodes visited during DFS means incrementing a counter when marking a node visited.Step 2: Why other options fail
Counting nodes with no neighbors or summing degrees won't give reachable count; BFS is alternative but not required.Final Answer:
Add a counter variable incremented each time a node is visited during DFS -> Option AQuick Check:
Count nodes when visited in DFS [OK]
- Counting nodes with no neighbors instead of visited
- Using BFS unnecessarily
- Summing degrees instead of counting visited
Ready to prove it?
Pass the test and this pattern moves unknown
