Coding Exercise: Graph DFS Using Recursion
Traverse graph depth-first: visit node → recurse unvisited neighbors.
Detect cycles, connected components, paths.
Problem Statement
Input: Graph (adjacency list), start node
Output: DFS traversal order
Visit each node exactly once.
Graph Representation
C++
Adjacency list structure
vector<vector<int>> adj;
vector<bool> visited;
// Example graph 0→1,0→2,1→2,2→3
adj = {{1,2}, {2}, {3}, {}};
Recursive DFS Solution
C++
Complete graph DFS implementation
#include <iostream>
#include <vector>
using namespace std;
void dfs(int node, vector<vector<int>>& adj, vector<bool>& visited) {
visited[node] = true;
cout << node << " ";
for (int neighbor : adj[node]) {
if (!visited[neighbor]) {
dfs(neighbor, adj, visited);
}
}
}
int main() {
int n = 4; // nodes 0-3
vector<vector<int>> adj(n);
// 0→1,0→2,1→2,2→3
adj[0] = {1, 2};
adj[1] = {2};
adj[2] = {3};
vector<bool> visited(n, false);
cout << "DFS from 0: ";
dfs(0, adj, visited);
cout << endl;
return 0;
}
DFS Traversal Path
TEXT
Graph traversal order
Graph: 0→1→2→3
↘
DFS(0): 0 → DFS(1) → DFS(2) → DFS(3)
Output: 0 1 2 3 ✓
Backtracks: 3→2→1→0
Test Cases
TEXT
Expected outputs
Line: 0→1 → 0 1
Cycle: 0→1→0 → 0 1
Disconnected → Multiple DFS calls
Complexity
Time: O(V+E)
Space: O(V) - recursion + visited
Practice Variations
1. DFS iterative (stack)
2. Cycle detection in directed graph
3. Topological sort (DAG)
Conclusion
Mastered graph recursion! DFS = tree recursion on steroids.
Next: BFS or shortest path algorithms.
Codecrown