题解 | #Sudoku#

Sudoku

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

package main

import (
	"fmt"
)

func main() {
	var maze [10][10]int
	for i := 0; i < 9; i++ {
		for j := 0; j < 9; j++ {
			fmt.Scan(&maze[i][j])
		}
	}
	var do func(x, y int) bool
	do = func(x, y int) bool {
		if maze[x][y] == 0 {
			xx := make(map[int]struct{}, 0)
			yy := make(map[int]struct{}, 0)
            block := make(map[int]struct{}, 0)
			for i := 0; i < 9; i++ {
				xx[maze[i][y]] = struct{}{}
				yy[maze[x][i]] = struct{}{}
			}
            for i := 0; i< 3; i++ {
                for j := 0; j < 3; j++ {
                    block[maze[x/3*3 + i][y/3*3+j]] = struct{}{}
                }
            }
			for i := 1; i < 10; i++ {
				_, ok1 := xx[i]
				_, ok2 := yy[i]
                _, ok3 := block[i]
				if !ok1 && !ok2 && !ok3{
					maze[x][y] = i
					if y+1 < 9 {
						if do(x, y+1) {
							return true
						}
					} else if x+1 < 9 {
						if do(x+1, 0) {
							return true
						}
					} else {
                        return true
                    }
                    maze[x][y] = 0
				}
			}
		} else {
			if y+1 < 9 {
				if do(x, y+1) {
					return true
				}
			} else if x+1 < 9 {
				if do(x+1, 0) {
					return true
				}
			} else {
                return true
            }
		}
        return false
	}
    do(0, 0)
    for i := 0; i < 9; i++ {
        for j := 0; j < 9; j++ {
            fmt.Printf("%d", maze[i][j])
            if j < 8 {
                fmt.Printf(" ")
            } else {
                fmt.Println("")
            }
        }
    }
}

全部评论

相关推荐

01-30 22:03
门头沟学院 Java
用微笑面对困难:我滴妈,【俩月】【实习】【主管】仨debuff吃满了,独立设计开发的项目写了绝大占比的运营板块,你独立开发,那维护、问题复盘、日志更新、bug、策划书全是自己整的? 不建议写那么大,可以从小出发更容易
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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