← Backtracking

Micro-Drill #187 — Sudoku solver

Backtracking Target: 15s

Find empty cell, try digits 1-9 with constraint checks (row, col, 3x3 box). Backtrack on failure.

def solveSudoku(board):
    def is_valid(r, c, ch):
        br, bc = 3*(r//3), 3*(c//3)
        for i in range(9):
            if board[r][i] == ch: return False
            if board[i][c] == ch: return False
            if board[br + i//3][bc + i%3] == ch: return False
        return True

    def solve():
        for i in range(9):
            for j in range(9):
                if board[i][j] == '.':
                    for ch in '123456789':
                        if is_valid(i, j, ch):
                            board[i][j] = ch
                            if solve(): return True
                            board[i][j] = '.'
                    return False
        return True
    solve()

Type it from memory. Go.

Practice Problems

← Micro #186 Micro #188 →