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[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[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[j] = 0 if counter == 9: return False return True def row_is_safe(mat, i, j, k): return not k in mat[:] 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)*3i//3)*3+3, (j//3)*3j//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 = list(map(int, input().split())) # output out_mat = sudoku_solver(mat) for row in out_mat: print(" ".join(map(str, row.astype(int)))) Continue reading...