1
1
package Problem0037
2
2
3
3
func solveSudoku (board [][]byte ) {
4
- nums := []byte ("519783426" )
4
+ nums := []byte ("123456789" )
5
+ blocks := []int {1 , 3 , 5 , 7 , 0 , 8 , 4 , 2 , 6 }
5
6
for _ , n := range nums {
6
- if ! fillBlock (board , n , 0 ) {
7
+ if ! fillBlock (board , n , blocks ) {
7
8
panic ("此题无解" )
8
9
}
9
10
}
10
11
}
11
12
12
- func fillBlock (board [][]byte , n byte , block int ) bool {
13
- print (board , n , block )
14
-
15
- if block == 9 {
13
+ func fillBlock (board [][]byte , n byte , blocks []int ) bool {
14
+ if len (blocks ) == 0 {
16
15
return true
17
16
}
18
17
18
+ block := blocks [0 ]
19
+
20
+ print (board , n , block )
21
+
19
22
rowZero := (block / 3 ) * 3
20
23
colZero := (block % 3 ) * 3
21
24
@@ -32,7 +35,7 @@ func fillBlock(board [][]byte, n byte, block int) bool {
32
35
}
33
36
34
37
if had () {
35
- return fillBlock (board , n , block + 1 )
38
+ return fillBlock (board , n , blocks [ 1 :] )
36
39
}
37
40
// 检查(r,c)所在的行和列是否已经存在 b 了
38
41
isClear := func (r , c int ) bool {
@@ -48,7 +51,7 @@ func fillBlock(board [][]byte, n byte, block int) bool {
48
51
for c := colZero ; c < colZero + 3 ; c ++ {
49
52
if board [r ][c ] == '.' && isClear (r , c ) {
50
53
board [r ][c ] = n
51
- if fillBlock (board , n , block + 1 ) {
54
+ if fillBlock (board , n , blocks [ 1 :] ) {
52
55
return true
53
56
}
54
57
// 后面的填写不成功,所以需要还原这个格子
0 commit comments