package main import ( "fmt" ) func main() { a := [9][9]int{} row := [9]map[int]bool{} col := [9]map[int]bool{} block := [3][3]map[int]bool{} for i := 0; i < 9; i++ { row[i] = map[int]bool{} col[i] = map[int]bool{} } for i := 0; i < 3; i++ { for j := 0; j < 3; j++ { block[i][j] = map[int]bool{} } } zeros := [][]int{} for i := 0 ; i < 9; i ++ { for j := 0; j < 9; j++ { fmt.Scan(&a[i][j]) if a[i][j] != 0 { row[i][a[i][j]] = true col[j][a[i][j]] = true block[i/3][j/3][a[i][j]] = true } else { zeros = append(zeros, []int{i,j}) } } } var dfs func(zs [][]int) bool dfs = func(zs [][]int) bool { if len(zs) == 0 { return true } zero := zs[0] x, y := zero[0], zero[1] for i := 1; i <= 9; i++ { if !row[x][i] && !col[y][i] && !block[x/3][y/3][i] { row[x][i] = true col[y][i] = true block[x/3][y/3][i] = true a[x][y] = i if dfs(zs[1:]) { return true } row[x][i] = false col[y][i] = false block[x/3][y/3][i] = false a[x][y] = 0 } } return false } dfs(zeros) for i := 0; i < 9; i++ { for j := 0; j < 9; j++ { fmt.Printf("%d ", a[i][j]) } fmt.Println() } }