题解 | Sudoku

Sudoku

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



def check(x, y, v, board):
    for k, i in enumerate(board[x]):
        if i == v and k != y:
            return False
    for k, i in enumerate(board):
        if i[y] == v and k != x:
            return False
    m = (x // 3)*3
    n = (y // 3)*3
    for i in range(m, m+3):
        for j in range(n, n+3):
            if (i != x or j != y) and  board[i][j] == v:
                return False
    return True

def process(board):
    for i in range(9):
        for j in range(9):
            if board[i][j] == 0:
                for k in range(1, 10):
                    board[i][j] = k
                    if check(i, j, k, board) and process(board):
                        return True
                    board[i][j] = 0
                return False
    return True

while True:
    try:
        board = []
        for i in range(9):
            board.append([int(i) for i in input().split()])
        process(board)
        for i in board:
            print(" ".join([str(j) for j in i]))
    except:
        break
                        


全部评论

相关推荐

05-29 22:11
门头沟学院 Java
Elastic90:抛开学历造假不谈,这公司的招聘需求也挺怪的,Java开发还要求你有图文识别、移动端开发和c++的经验,有点逆天了。
点赞 评论 收藏
分享
05-22 12:44
已编辑
门头沟学院 golang
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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