Leetcode 037 解数独 思路清晰 python

Sudoku-Java

http://www.nowcoder.com/questionTerminal/78a1a4ebe8a34c93aac006c44f6bf8a1


class Solution:

    def isValue(self, board, x, y):
        # 检查已经填入的坐标是否和列中有的元素相等
        for i in range(9): 
            if i != x and board[i][y] == board[x][y]:
                return False
        # 检查已经填入的坐标是否和行中有的元素相等
        for j in range(9): 
            if j != y and board[x][j] == board[x][y]:
                return False

        # 检查每个正方形是否符合(粗线框内只有1~9) 
        m, n = 3*(x // 3), 3*(y // 3)  # 这里求出的是3x3网格的左上角的坐标 
        for i in range(3):
            for j in range(3):
                if(i+m != x or j+n != y) and board[i+m][j+n] == board[x][y]:
                    return False  

        return True

    def dfs(self, board):

        for i in range(9):
            for j in range(9):
                if board[i][j] == 0:
                    for k in '123456789':  # 从里面选择一个
                        board[i][j] = int(k)
                        if self.isValue(board, i, j) and self.dfs(board):
                            return True
                        # 回溯
                        board[i][j] = 0
                    # 都不行,说明上次的数字不合理
                    return False
        # 全部便利完,返回True
        return True

while True:
    try:
        board = []
        for i in range(9):
            row = list(map(int, input().split()))
            board.append(row)

        s = Solution()
        s.dfs(board)

        for i in range(9):
            board[i] = list(map(str, board[i]))
            print(' '.join(board[i]))
    except:
        break

全部评论
我很好奇是不是这种题只能靠DFS去枚举,说实话这个数独让我自己填我都填不出来,难道那些玩数独厉害的大神也是靠在脑子里枚举所有可能性吗?
点赞 回复 分享
发布于 2023-10-21 17:48 广东
5 9 2 4 8 1 7 6 3 4 1 3 7 6 2 9 8 5 8 6 7 3 5 9 4 1 2 6 2 4 1 9 5 3 7 8 7 5 9 8 4 3 1 2 6 1 3 8 6 2 7 5 9 4 2 7 1 5 3 8 6 4 9 3 8 6 9 0 4 2 5 0 9 4 5 2 0 6 8 3 0 这种既可以 5 9 2 4 8 1 7 6 3 4 1 3 7 6 2 9 8 5 8 6 7 3 5 9 4 1 2 6 2 4 1 9 5 3 7 8 7 5 9 8 4 3 1 2 6 1 3 8 6 2 7 5 9 4 2 7 1 5 3 8 6 4 9 3 8 6 9 1 4 2 5 7 9 4 5 2 7 6 8 3 1 又可以是 5 9 2 4 8 1 7 6 3 4 1 3 7 6 2 9 8 5 8 6 7 3 5 9 4 1 2 6 2 4 1 9 5 3 7 8 7 5 9 8 4 3 1 2 6 1 3 8 6 2 7 5 9 4 2 7 1 5 3 8 6 4 9 3 8 6 9 7 4 2 5 1 9 4 5 2 1 6 8 3 7 的怎么算?
点赞 回复 分享
发布于 2023-10-02 14:57 湖北
大佬太强了,我先跪为敬
点赞 回复 分享
发布于 2023-03-26 17:43 黑龙江
这个对
点赞 回复 分享
发布于 2022-03-14 11:07

相关推荐

本神尊:看来是没招到小红薯上的人
点赞 评论 收藏
分享
仁者伍敌:难怪小公司那么挑剔,让你们这些大佬把位置拿了
点赞 评论 收藏
分享
点赞 评论 收藏
分享
评论
59
23
分享

创作者周榜

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