1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86
| def solve_sudoku(grid): # Find an empty cell (with value 0) for i in range(9): for j in range(9): if grid[i][j] == 0: # Try all possible numbers for num in range(1, 10): if is_valid(grid, i, j, num): # Try this number grid[i][j] = num
# Recursively solve the rest if solve_sudoku(grid): return True
# Backtrack if solution not found grid[i][j] = 0
# No valid number found return False
# All cells filled return True
def is_valid(grid, row, col, num): # Check row if num in grid[row]: return False
# Check column for i in range(9): if grid[i][col] == num: return False
# Check 3x3 subgrid start_row, start_col = 3 * (row // 3), 3 * (col // 3) for i in range(3): for j in range(3): if grid[start_row + i][start_col + j] == num: return False
return True
def print_grid(grid): for i in range(9): if i % 3 == 0 and i != 0: print("- - - - - - - - - - -") for j in range(9): if j % 3 == 0 and j != 0: print("|", end=" ") print(grid[i][j] if grid[i][j] != 0 else ".", end=" ") print()
def grid_to_string(grid): return ''.join(''.join(str(num) for num in row) for row in grid)
# Sudoku grid sudoku = [ [0,8,0,0,0,0,0,7,0], [7,0,2,0,0,0,0,5,1], [0,6,0,0,0,7,9,0,8], [0,5,0,0,0,2,0,0,4], [1,0,0,0,0,0,2,3,0], [2,0,4,0,1,3,0,8,0], [0,0,5,0,8,9,1,0,0], [9,0,0,0,0,0,8,0,0], [0,1,7,2,5,6,4,0,3] ]
print("Original Sudoku:") print_grid(sudoku) original_str = grid_to_string(sudoku) print("\nOriginal as string:", original_str)
print("\nSolving...\n")
if solve_sudoku(sudoku): print("Solved Sudoku:") print_grid(sudoku) solved_str = grid_to_string(sudoku) print("\nSolved as string:", solved_str) else: print("No solution exists for this Sudoku puzzle.")
|