Browse curriculum

Backtracking

Backtracking and Constraint Search

Backtracking is search with an undo. You commit to a choice, recurse, and if the choice cannot lead anywhere valid you unwind it and try the next. Described that way it sounds simple; written as recursive code with a mutable state that has to be restored precisely, it is a common source of confusion.

This is the topic where watching execution helps most, because the shape of the algorithm is a tree being walked and pruned. Seeing N-Queens place a queen, hit a conflict several rows later and unwind makes the undo step concrete, and the same structure then reads clearly in subsets, permutations and Sudoku.

6

Interactive lessons

6

Languages (JS, TS, Python, Java, C, C++)

Lessons

Backtracking lessons

Complexity

Backtracking time and space complexity compared

Best, average and worst-case running time and extra space for every backtracking lesson, as each lesson derives them.

LessonBestAverageWorstSpace
IntroductionExponential (depends on branching factor and depth)ExponentialO(B^D) where B is branching factor, D is depth (e.g., O(N!) or O(2^N))O(D) (Recursion stack depth)
SubsetsO(N * 2^N)O(N * 2^N)O(N * 2^N)O(N)
PermutationsO(N * N!)O(N * N!)O(N * N!)O(N) (Recursion stack)
N-QueensO(N!)O(N!)O(N!)O(N) (Recursion stack + board storage)
Sudoku SolverO(9^M) (M = empty cells)O(9^M)O(9^M)O(M) (recursion stack)
Rat in a MazeO(3^(N^2))ExponentialO(3^(N^2))O(L * N^2) where L is path length
Curriculum

Continue the DSA curriculum

Backtracking is one of 12 topics in the interactive DSA visualizer curriculum. Once this topic is comfortable, the coding interview pattern library reorganises the same material around the patterns interview questions are built on.

Directory

Every other DSA visualizer