1
- import numpy as np
2
- import random
3
1
from move import Move
4
2
from sudoku import Sudoku
5
3
6
- LEGIT_DIGITS = list (range (1 ,10 ))
7
-
8
- def solve_sudoku (sudoku : Sudoku ) -> Sudoku :
4
+ LEGIT_DIGITS = list (range (1 , 10 ))
5
+ SUDOKU_DIMENSION = 9
9
6
7
+ def solve_sudoku (sudoku : Sudoku , row : int , column : int ) -> bool :
10
8
'''
11
9
Solve a given legal sudoku by appliying a
12
10
backtracking strategy.
13
11
'''
14
12
15
- if np .count_nonzero (sudoku .grid ) == 0 :
16
- return sudoku
17
-
18
- # Test a move for the first nakedcell encountered
19
- naked_cells_indexes = np .where (sudoku .grid == 0 )
20
- first_naked_cell = (naked_cells_indexes [0 ][0 ], naked_cells_indexes [1 ][0 ])
21
- #digits_in_row = sudoku.grid[first_naked_cell[0], :]
22
- #digits_in_column = sudoku.grid[:, first_naked_cell[1]]
23
- #digits_in_region = sudoku.get_region_from_move(Move(0, first_naked_cell[0], first_naked_cell[1]))
13
+ # Return True when the last cell is achieved to avoid further backtracking
14
+
15
+ if (row == SUDOKU_DIMENSION - 1 and column == SUDOKU_DIMENSION - 1 ):
16
+ print ("The solution to the Sudoku proposed is: \n " , sudoku .grid )
17
+ return True
18
+
19
+ # If we're in the last column, move to the next row
20
+
21
+ if column == SUDOKU_DIMENSION :
22
+ row += 1
23
+ column = 0
24
+
25
+ if sudoku .grid [row , column ] > 0 :
26
+ return solve_sudoku (sudoku , row , column + 1 )
24
27
25
- move = Move (0 , first_naked_cell [ 0 ], first_naked_cell [ 1 ] )
28
+ move = Move (0 , row , column )
26
29
27
30
for digit in LEGIT_DIGITS :
28
31
move .number = digit
29
- sudoku .put_number (move )
30
- if sudoku .check_legal_state (move ):
31
- print ("Legal move" )
32
- print (sudoku .grid )
33
- solve_sudoku (sudoku )
34
- move .number = 0
35
- sudoku .put_number (move )
32
+
33
+ if sudoku .is_legal_state (move ):
34
+ sudoku .put_number (move )
35
+
36
+ if solve_sudoku (sudoku , row , column + 1 ):
37
+ return True
38
+
39
+ sudoku .grid [row , column ] = 0
40
+
41
+ return False
0 commit comments