用 Python 编写程序来验证数独网格是否可解

pythonserver side programmingprogramming更新于 2026/2/4 3:56:17

假设我们有一个 9×9 数独网格。我们现在必须检查它是否有效。只需根据以下规则验证已填充的单元格 −

  • 每行必须包含从 1−9 开始的数字,且不能重复。

  • 每列必须包含从 1−9 开始的数字,且不能重复。

  • 网格的 9 个(3−3)子框中的每一个都必须包含从 1−9 开始的数字,且不能重复。

假设数独网格就像 −

这是有效的。

为了解决这个问题,我们将遵循以下步骤 −

  • 对于 i 在 0 到 8 范围内

    • 创建一些名为 row、col 和 block 的空字典,row_cube := 3 * (i / 3),col_cube := 3 * (i mod 3)

    • 对于 j 在 0 到 8 范围内

      • 如果 board[i, j] 不为空且 board[i, j] 在 row 中,则返回 false

      • row[board[i, j]] := 1

      • 如果 board[j, i] 不为空且 board[j, i] 在 col 中,则返回 false

      • col[board[j, i]] := 1

      • rc := row_cube + j/3 和 cc := col_cube + j mod 3

      • 如果 board[rc, cc] 在 block 中且 board[rc, cc] 不为空,则返回 false

      • block[board[rc, cc]] := 1

  • 返回 true

让我们看看下面的实现以便更好地理解 −

示例

class Solution(object):
   def isValidSudoku(self, board):
      for i in range(9):
         row = {}
         column = {}
         block = {}
         row_cube = 3 * (i//3)
         column_cube = 3 * (i%3)
         for j in range(9):
            if board[i][j]!='.' and board[i][j] in row:
               return False
            row[board[i][j]] = 1
            if board[j][i]!='.' and board[j][i] in column:
               return False
            column[board[j][i]] = 1
            rc= row_cube+j//3
            cc = column_cube + j%3
            if board[rc][cc] in block and board[rc][cc]!='.':
               return False
            block[board[rc][cc]]=1
         return True
ob1 = Solution()
print(ob1.isValidSudoku([
["5","3",".",".","7",".",".",".","."],
["6",".",".","1","9","5",".",".","."],
[".","9","8",".",".",".",".","6","."],
["8",".",".",".","6",".",".",".","3"],
["4",".",".","8",".","3",".",".","1"],
["7",".",".",".","2",".",".",".","6"],
[".","6",".",".",".",".","2","8","."],
[".",".",".","4","1","9",".",".","5"],
[".",".",".",".","8",".",".","7","9"]]))

输入

[
["5","3",".",".","7",".",".",".","."],
["6",".",".","1","9","5",".",".","."],
[".","9","8",".",".",".",".","6","."],
["8",".",".",".","6",".",".",".","3"],
["4",".",".","8",".","3",".",".","1"],
["7",".",".",".","2",".",".",".","6"],
[".","6",".",".",".",".","2","8","."],
[".",".",".","4","1","9",".",".","5"],
[".",".",".",".","8",".",".","7","9"]]

输出

True

相关文章


有用资源