赞
踩
题目:
题解:
- func solveSudoku(board [][]byte) {
- var line, column [9][9]bool
- var block [3][3][9]bool
- var spaces [][2]int
-
- for i, row := range board {
- for j, b := range row {
- if b == '.' {
- spaces = append(spaces, [2]int{i, j})
- } else {
- digit := b - '1'
- line[i][digit] = true
- column[j][digit] = true
- block[i/3][j/3][digit] = true
- }
- }
- }
-
- var dfs func(int) bool
- dfs = func(pos int) bool {
- if pos == len(spaces) {
- return true
- }
- i, j := spaces[pos][0], spaces[pos][1]
- for digit := byte(0); digit < 9; digit++ {
- if !line[i][digit] && !column[j][digit] && !block[i/3][j/3][digit] {
- line[i][digit] = true
- column[j][digit] = true
- block[i/3][j/3][digit] = true
- board[i][j] = digit + '1'
- if dfs(pos + 1) {
- return true
- }
- line[i][digit] = false
- column[j][digit] = false
- block[i/3][j/3][digit] = false
- }
- }
- return false
- }
- dfs(0)
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。