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.")
   |