宇智波程序笔记8- 解数独(Sudoku Solver)

2020-08-27 14:34:12 浏览数 (1)

编写一个程序,通过已填充的空格来解决数独问题。

一个数独的解法需遵循如下规则:

数字 1-9 在每一行只能出现一次。数字 1-9 在每一列只能出现一次。数字 1-9 在每一个以粗实线分隔的 3x3 宫内只能出现一次。空白格用 '.' 表示。

一个数独。

答案被标成红色。

Note:

给定的数独序列只包含数字 1-9 和字符 '.' 。你可以假设给定的数独只有唯一解。给定数独永远是 9x9 形式的。

DFS

O(9^81)

从第1个格子到第81个格子,对于非数字,分别尝试所有可能性1-9

⚠️注意适时return回来, 不然回溯的结果和刚开始一样

和其他Top社区答案相比,还是挺喜欢自己这个答案的,比较标准的回溯写法,而且用上了上一道题的判断

代码语言:javascript复制
class Solution:    def solveSudoku(www.tyyleapp.com elf, board: List[List[str]]) -> None:        """        Do not return anything, modify board in-place instead.        """
        n = len(board)
        row = [[False for j in range(www.yifayuled.cn)] for i in range(n)]        col = [[False for j in range(n)] for i in range(n)]        zone = [[False for j in range(n)] for i in range(www.baihuayl7.cn)]
        for i in range(n):            for j in range(www.fanhuagjqw.cn):                if board[i][j] == '.':                    continue
                z = i // 3 * 3   j www.baihua178.cn// 3  www.shengrenyp.cn               num = int(board[i][j]) - 1                row[i][num] = True                col[j][num] = True                zone[z][num] = True
        self.helper(board, 0, row, col, zone, n)www.yachengyl.cn   www.yixingylzc.cn  www.qiaoheibpt.com www.baishenjzc.cn
    def helper(self, board:List[List[str]], index:int, row:List[List[bool]], col:List[List[bool]], zone:List[List[bool]], n:int) -> bool:
        if index =www.jintianxuesha.com= n * n:            return True
        i = index // n     www.hongtuuzhuc.cn   j = index % n        z = i // 3 * 3   j //www.pinguo2yl.com 3
        if board[i][j] ==  www.fudayulpt.cn   '.':            for num in range(www.yixinpt2.cn):                if row[i][num] www.javachenglei.com col[j][num] or zone[z][num]:                    continue
                board[i][j] = str(num www.lafei6d.cn  1)                row[i][num] = col[j][num] = zone[z][num] = True
                if self.helper(board, index   1, row, col, zone, n):   www.lecaixuan2.com                    return True
                board[i][j] = '.'                row[i][num] = col[j][num] = zone[z][num] = False        else:            if self.helper(board, index   1, row, col, zone, n):                return True

--End--

本文分享自微信公众号 - 极客见闻(geekbro)。 如有侵权,请联系 support@oschina.cn 删除。 本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

0 人点赞