Project 11: Backtracking Puzzle Solver

Build a solver for puzzles like Sudoku and N-Queens using backtracking.

Quick Reference

Attribute Value
Difficulty Level 3: Advanced
Time Estimate 2-3 weeks
Language Python (Alternatives: C, Java, Rust)
Prerequisites Project 4, recursion mastery
Key Topics Backtracking, constraints, pruning

1. Learning Objectives

By completing this project, you will:

  1. Implement backtracking search with pruning.
  2. Encode constraints for puzzles (Sudoku, N-Queens).
  3. Compare brute force vs pruned search.
  4. Visualize search progress.

2. Theoretical Foundation

2.1 Core Concepts

  • Backtracking: Build partial solutions and abandon invalid paths early.
  • Constraint checking: Prune branches as soon as a constraint fails.
  • Ordering heuristics: Choose the next variable with the fewest options.
  • Constraint propagation: Reduce possibilities before recursion.

2.2 Why This Matters

Backtracking is the core technique for solving NP-complete puzzles and combinatorial search problems.

2.3 Historical Context / Background

Backtracking emerged from early AI and search research and remains a key approach in constraint satisfaction problems.

2.4 Common Misconceptions

  • Misconception: Backtracking is just brute force. Reality: Pruning makes it far more efficient.
  • Misconception: Heuristics always find the best path. Reality: They guide search, not guarantee optimality.

3. Project Specification

3.1 What You Will Build

A puzzle solver that can handle Sudoku and N-Queens with configurable heuristics and optional visualization.

3.2 Functional Requirements

  1. Sudoku solver: Solve valid 9x9 puzzles.
  2. N-Queens solver: Find all solutions for N.
  3. Heuristics: Choose next cell using MRV (minimum remaining values).
  4. Visualization: Show board states during search.

3.3 Non-Functional Requirements

  • Performance: Solve standard Sudoku quickly.
  • Reliability: Detect unsolvable puzzles.
  • Usability: CLI accepts puzzle input.

3.4 Example Usage / Output

$ ./backtracking --sudoku puzzles/easy.txt
Solved in 0.03s, nodes=512
$ ./backtracking --nqueens 8
Solutions: 92

3.5 Real World Outcome

You will solve puzzles and see the solver prune large portions of the search space, demonstrating how constraints reduce complexity.


4. Solution Architecture

4.1 High-Level Design

┌───────────┐     ┌──────────────┐     ┌─────────────┐
│ CLI Input │────▶│ Solver Core  │────▶│ Visualizer  │
└───────────┘     └──────┬───────┘     └─────────────┘
                            │
                      ┌─────▼─────┐
                      │ Heuristics│
                      └───────────┘

4.2 Key Components

Component Responsibility Key Decisions
solver.py Backtracking engine Recursion with pruning
constraints.py Validity checks Precompute row/col/box sets
heuristics.py Variable ordering MRV + degree heuristic
viz.py Board output ASCII or GUI

4.3 Data Structures

# Sudoku board as list of lists
board = [[0] * 9 for _ in range(9)]

4.4 Algorithm Overview

Key Algorithm: Backtracking with MRV

  1. Pick the cell with fewest candidate values.
  2. Try each candidate.
  3. Recurse; undo if invalid.

Complexity Analysis:

  • Time: exponential in worst case
  • Space: O(depth)

5. Implementation Guide

5.1 Development Environment Setup

python3 -m venv .venv
. .venv/bin/activate

5.2 Project Structure

backtracking-solver/
├── src/
│   ├── solver.py
│   ├── constraints.py
│   ├── heuristics.py
│   ├── viz.py
│   └── cli.py
├── puzzles/
└── tests/

5.3 The Core Question You’re Answering

“How can pruning turn an exponential search into something practical?”

5.4 Concepts You Must Understand First

Stop and research these before coding:

  1. Constraint satisfaction
  2. Backtracking recursion
  3. Heuristics (MRV, degree)

5.5 Questions to Guide Your Design

  1. How will you represent candidate sets efficiently?
  2. How will you track nodes visited?
  3. How will you stop early once a solution is found?

5.6 Thinking Exercise

Solve a 4x4 Sudoku by hand and mark where you make guesses vs deductions.

5.7 The Interview Questions They’ll Ask

  1. How does backtracking work?
  2. What is pruning and why is it effective?
  3. How would you solve N-Queens?

5.8 Hints in Layers

Hint 1: Precompute constraints Track sets for rows, columns, and boxes.

Hint 2: Start with N-Queens It is simpler than Sudoku and shows backtracking clearly.

Hint 3: Add MRV Pick the most constrained cell to prune faster.

5.9 Books That Will Help

Topic Book Chapter
Backtracking “Algorithm Design Techniques” Ch. 8
Constraint satisfaction “Artificial Intelligence: A Modern Approach” Ch. 6

5.10 Implementation Phases

Phase 1: Foundation (4-5 days)

Goals:

  • Implement N-Queens
  • Add recursion tracing

Tasks:

  1. Build backtracking solver for N-Queens.
  2. Add node counter.

Checkpoint: Correct solution counts for N=4,5,6.

Phase 2: Sudoku Solver (5-7 days)

Goals:

  • Implement Sudoku constraints
  • Add MRV heuristic

Tasks:

  1. Implement row/col/box checks.
  2. Add candidate generation.

Checkpoint: Solve easy Sudoku quickly.

Phase 3: Visualization and Polish (3-4 days)

Goals:

  • Add visualization
  • Add CLI options

Tasks:

  1. Print board after each assignment (optional).
  2. Add puzzles folder loader.

Checkpoint: CLI solves puzzles from files.

5.11 Key Implementation Decisions

Decision Options Recommendation Rationale
Constraint tracking recompute, cached sets cached sets Faster checks
Heuristics none, MRV MRV Major pruning benefit
Visualization ASCII, GUI ASCII Quick to implement

6. Testing Strategy

6.1 Test Categories

Category Purpose Examples
Unit Tests Constraint checks Valid/invalid placements
Integration Tests Solver Known puzzles
Edge Case Tests Unsatisfiable puzzles Contradicting clues

6.2 Critical Test Cases

  1. Sudoku with a single empty cell.
  2. N-Queens for N=1 and N=2 (no solution for 2).
  3. Puzzle with multiple solutions (report one).

6.3 Test Data

Sudoku: easy.txt
N-Queens: N=4,8

7. Common Pitfalls and Debugging

7.1 Frequent Mistakes

Pitfall Symptom Solution
Not undoing state Invalid board later Backtrack cleanly
Slow checks Very slow solving Cache row/col/box sets
Incorrect candidate list No solution found Validate constraints

7.2 Debugging Strategies

  • Print candidate sets for a known puzzle.
  • Validate solver on small N-Queens first.

7.3 Performance Traps

Without MRV, Sudoku may take extremely long. Add heuristics early.


8. Extensions and Challenges

8.1 Beginner Extensions

  • Add a step counter to the output.
  • Add 4x4 Sudoku mode.

8.2 Intermediate Extensions

  • Add forward checking for Sudoku.
  • Add heuristic ordering for N-Queens.

8.3 Advanced Extensions

  • Implement exact cover with Algorithm X.
  • Add GUI visualization with animations.

9. Real-World Connections

9.1 Industry Applications

  • Scheduling and resource allocation problems
  • Constraint solvers in optimization systems
  • Norvig Sudoku: Classic Sudoku solver.
  • OR-Tools: Constraint programming toolkit.

9.3 Interview Relevance

Backtracking is a common interview pattern for combinations, permutations, and constraint puzzles.


10. Resources

10.1 Essential Reading

  • “Algorithm Design Techniques” by Karumanchi - Ch. 8
  • “Artificial Intelligence: A Modern Approach” - Ch. 6

10.2 Video Resources

  • Backtracking visualizations on YouTube

10.3 Tools and Documentation

  • OR-Tools: https://developers.google.com/optimization

11. Self-Assessment Checklist

11.1 Understanding

  • I can explain backtracking and pruning.
  • I can describe MRV and why it helps.
  • I can explain why N-Queens is exponential.

11.2 Implementation

  • Solver finds correct solutions.
  • Performance is reasonable for standard puzzles.

11.3 Growth

  • I can apply backtracking to other problems.

12. Submission / Completion Criteria

Minimum Viable Completion:

  • N-Queens solver
  • Sudoku solver for easy puzzles

Full Completion:

  • MRV heuristic
  • CLI with puzzle files

Excellence (Going Above and Beyond):

  • Algorithm X implementation
  • Animated GUI solver

This guide was generated from LEARN_ALGORITHMS_DEEP_DIVE.md. For the complete learning path, see the parent directory.