The Sudoku game is played on a 9x9 grid. Inside the rows and columns are 9 "squares" (made up of 3x3 spaces). Each row, column and square (9 spaces each) must be completed with the numbers from 1 to 9, without repeating any number within the row, column or square. The following Python program solves Sudoku using backtracking. The method that starts the solution is "solve_sudoku(matrix)" and receives as input an n x n matrix where the empty inputs are represented by -1. From the program, analyze its execution time. from pprint import pprint def search_next_void(puzzle): for r in range(9): for c in range(9): if puzzle[r][c] == -1: return r, c return None, None def is_valid(puzzle, guess, row, col): row_vals = puzzle[row] if guess in row_vals: return False col_vars = [puzzle[i][col] for i in range(9)] if guess in col_vars: return False row_start = (row // 3) * 3 col_start = (col // 3) * 3 for r in range(row_start, row_start + 3): for c in range(col_start, col_start + 3): if puzzle[r][c] == guess: return False return True def solve_sudoku(puzzle): row, col = search_next_void(puzzle) if row is None: return True for guess in range(1, 10): if is_valid(puzzle, guess, row, col): print(board_example) print("\n") puzzle[row][col] = guess if solve_sudoku(puzzle): return True puzzle[row][col] = -1 return False

C++ for Engineers and Scientists
4th Edition
ISBN:9781133187844
Author:Bronson, Gary J.
Publisher:Bronson, Gary J.
Chapter4: Selection Structures
Section: Chapter Questions
Problem 14PP
icon
Related questions
Question

The Sudoku game is played on a 9x9 grid. Inside the rows and columns are 9 "squares" (made up of 3x3 spaces). Each row, column and square (9 spaces each) must be completed with the numbers from 1 to 9, without repeating any number within the row, column or square.

The following Python program solves Sudoku using backtracking. The method that starts the solution is "solve_sudoku(matrix)" and receives as input an n x n matrix where the empty inputs are represented by -1. From the program, analyze its execution time.

from pprint import pprint

def search_next_void(puzzle):
    for r in range(9):
        for c in range(9):
            if puzzle[r][c] == -1:
                return r, c

    return None, None

def is_valid(puzzle, guess, row, col):
    row_vals = puzzle[row]
    if guess in row_vals:
        return False

    col_vars = [puzzle[i][col] for i in range(9)]
        if guess in col_vars:
            return False

    row_start = (row // 3) * 3
    col_start = (col // 3) * 3

    for r in range(row_start, row_start + 3):
        for c in range(col_start, col_start + 3):
            if puzzle[r][c] == guess:
                return False

    return True

def solve_sudoku(puzzle):
    row, col = search_next_void(puzzle)
    if row is None:
        return True

    for guess in range(1, 10):
        if is_valid(puzzle, guess, row, col):
            print(board_example)
            print("\n")
            puzzle[row][col] = guess

            if solve_sudoku(puzzle):
                return True

    puzzle[row][col] = -1

    return False

Expert Solution
steps

Step by step

Solved in 2 steps

Blurred answer
Knowledge Booster
Quicksort
Learn more about
Need a deep-dive on the concept behind this application? Look no further. Learn more about this topic, computer-science and related others by exploring similar questions and additional content below.
Similar questions
  • SEE MORE QUESTIONS
Recommended textbooks for you
C++ for Engineers and Scientists
C++ for Engineers and Scientists
Computer Science
ISBN:
9781133187844
Author:
Bronson, Gary J.
Publisher:
Course Technology Ptr
C++ Programming: From Problem Analysis to Program…
C++ Programming: From Problem Analysis to Program…
Computer Science
ISBN:
9781337102087
Author:
D. S. Malik
Publisher:
Cengage Learning