📅  最后修改于: 2023-12-03 14:56:44.004000             🧑  作者: Mango
欢迎参加算法测验!本次测验的主题是 Sudo 放置。在问题9中,我们需要编写一个程序来检查给定数独棋盘是否合法。
数独是一种逻辑谜题,通常由9x9的方格组成,分为9个小方块,每个小方块包含9个格子。玩家需要根据已给出的数字,按照规则在剩余的空格上填入1到9的数字,使得每一行、每一列和每个小方块都包含1到9的数字,且每个数字在同一行/列/小方块中只能出现一次。
为了检查数独棋盘是否合法,我们可以依次检查每一行、每一列和每个小方块是否满足数独规则。
如果以上3个条件都满足,则数独棋盘合法。
下面是一个使用 Python 语言编写的示例代码,用于检查数独棋盘是否合法:
def is_valid_sudoku(board):
# Check rows
for row in board:
if not is_valid_row(row):
return False
# Check columns
for col in range(9):
if not is_valid_column(board, col):
return False
# Check blocks
for block_row in range(0, 9, 3):
for block_col in range(0, 9, 3):
if not is_valid_block(board, block_row, block_col):
return False
return True
def is_valid_row(row):
nums = set()
for num in row:
if num != ".":
if num in nums:
return False
nums.add(num)
return True
def is_valid_column(board, col):
nums = set()
for row in range(9):
num = board[row][col]
if num != ".":
if num in nums:
return False
nums.add(num)
return True
def is_valid_block(board, block_row, block_col):
nums = set()
for row in range(block_row, block_row + 3):
for col in range(block_col, block_col + 3):
num = board[row][col]
if num != ".":
if num in nums:
return False
nums.add(num)
return True
# Test case
board = [
["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"]
]
print(is_valid_sudoku(board)) # Output: True
以上代码中,我们定义了 is_valid_sudoku
函数来检查数独棋盘的合法性。该函数分别调用了三个辅助函数 is_valid_row
、is_valid_column
和 is_valid_block
来检查每一行、每一列和每个小方块的合法性。
在给定的测试用例中,输出为 True
,表示数独棋盘合法。
希望上述说明和示例代码能帮助你完成问题9的编程任务。祝你好运!