题解 | #Sudoku#

Sudoku

https://www.nowcoder.com/practice/78a1a4ebe8a34c93aac006c44f6bf8a1

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()
    }
}

全部评论

相关推荐

02-25 16:55
已编辑
北京工业大学 Java
211本,找日常实习的话,如果面向中厂的话,需要刷hot100么?因为之前从来没刷过,算法仅限于学校课程水平,准备3月投递简历,现在还需要背八股文,时间有些紧张,还需要刷算法题么?同时什么样的公司可以算是中厂呢?
程序员小白条:中大厂说的上名字的,必定要算法,hot100只是最基础的了,题库远不止100题捏,一般在300-400题量之间,算法=学校课程=简单题也做不出,多准备八股文和算法吧,其他项目可以放放,精刷算法就行了,花时间成长很快的
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务