October 25, 2024
Chicago 12, Melborne City, USA
python

Sudoku solver using backtracking


I am using this code to solve sudoku using backtracking algorithm but it, although giving right answer, is encountering the error of "memory limit exceeded" where I am trying to test it

I think I am trapped in a loop somewhere!

import numpy as np

def sudoku_solver_util(mat, many, f_count):
if many[0] >= 9 ** (81 – f_count):
return False
for i in range(9):
for j in range(9):
if mat[i][j] == 0:
counter = 0
for k in range(1, 10):
counter += 1
many[0] += 1
if is_safe(mat, i, j, k, 0, f_count, many):
mat[i][j] = k
if sudoku_solver_util(mat, many, f_count):
return True
count = np.count_nonzero(mat)
if many[0] >= 9**(81-f_count):
return False
mat[i][j] = 0
if counter == 9:
return False
return True

def row_is_safe(mat, i, j, k):
return not k in mat[i][:]

def col_is_safe(mat, i, j, k):
return not k in mat[:,j]

def grid_is_safe(mat, i, j, k):
return not k in small_sudoku(mat, i, j)

def is_safe(mat, i, j, k, counter, count, many):
return row_is_safe(mat, i, j, k) and col_is_safe(mat, i, j, k) and grid_is_safe(mat, i, j, k)

def small_sudoku(mat, i, j):
return mat[(i//3)*3:(i//3)*3+3, (j//3)*3:(j//3)*3+3]

def sudoku_solver(mat):
many = [0]
f_count = np.count_nonzero(mat)
if sudoku_solver_util(mat, many, f_count):
return mat
else:
return np.zeros((9,9))

input

mat = np.zeros((9,9))
for i in range(0,9):
mat[i] = list(map(int, input().split()))

output

out_mat = sudoku_solver(mat)
for row in out_mat:
print(" ".join(map(str, row.astype(int))))



You need to sign in to view this answers

Leave feedback about this

  • Quality
  • Price
  • Service

PROS

+
Add Field

CONS

+
Add Field
Choose Image
Choose Video