Each subpattern solves a specific type of problem. Click on a card to view its template.
Template for: Graph DFS
Represent the graph as unordered_map<int, vector<int>> or a 2D vector. For grids, neighbours are the 4 (or 8) adjacent cells.
Keep a visited array or set. Mark a node visited before recursing into its neighbours — prevents infinite loops in cyclic graphs.
Iterate every node; if unvisited, call dfs(node). This ensures all disconnected components are explored.
1// Graph DFS — adjacency list, O(V + E)2vector<vector<int>> adj; // adj[u] = list of neighbours of u3vector<bool> visited;45void dfs(int node)6{7 visited[node] = true;89 for (int neighbour : adj[node])10 {11 if (!visited[neighbour])12 {13 dfs(neighbour);14 }15 }16}1718// Call for every unvisited node to handle disconnected components19int countComponents(int n)20{21 adj.assign(n, {});22 visited.assign(n, false);23 int components = 0;2425 for (int i = 0; i < n; i++)26 {27 if (!visited[i])28 {29 dfs(i);30 components++;31 }32 }3334 return components;35}
Sharpen your skills with hand-picked problems.
LeetCode #200
LeetCode #695
LeetCode #133
LeetCode #417
LeetCode #130
LeetCode #1091
LeetCode #994
LeetCode #127
LeetCode #542
LeetCode #1306
LeetCode #323
LeetCode #684
LeetCode #261
LeetCode #721
LeetCode #207
LeetCode #210
LeetCode #269
LeetCode #310
LeetCode #743
LeetCode #1631
LeetCode #787
LeetCode #1514
LeetCode #802
LeetCode #207
LeetCode #1584
LeetCode #1168
LeetCode #1489