Sudoku Solver — Deep Dive
A line-by-line explanation of my backtracking solver using row/col/box sets.
Goals
- Explain data structures: rows, cols, boxes.
- Walk through backtracking & undo.
- Discuss typical vs worst-case complexity.
Key snippet
# Choose next empty, try digits, recurse, undo on fail def backtrack(index): if index == len(empty_cells): return True i, j = empty_cells[index]; b = (i//3)*3 + (j//3) for d in '123456789': if d not in rows[i] and d not in cols[j] and d not in boxes[b]: board[i][j] = d rows[i].add(d); cols[j].add(d); boxes[b].add(d) if backtrack(index + 1): return True rows[i].remove(d); cols[j].remove(d); boxes[b].remove(d) board[i][j] = '.' return False
(Add your commentary here — e.g., why sets are O(1), choosing order of cells, MRV heuristic ideas, etc.)
Back to project