写一个骨灰级九宫数独程序
以下是一个简单的九宫数独程序实现:
def is_valid(board, row, col, num):
# 检查同一行是否有重复数字
for i in range(9):
if board[row][i] == num:
return False
# 检查同一列是否有重复数字
for j in range(9):
if board[j][col] == num:
return False
# 检查同一个3x3宫格是否有重复数字
start_row = (row // 3) * 3
start_col = (col // 3) * 3
for i in range(3):
for j in range(3):
if board[start_row + i][start_col + j] == num:
return False
return True
def solve_sudoku(board):
for row in range(9):
for col in range(9):
if board[row][col] == '.':
for num in range(1, 10):
if is_valid(board, row, col, str(num)):
board[row][col] = str(num)
if solve_sudoku(board):
return True
board[row][col] = '.' # 回溯
return False
return True
def print_board(board):
for row in board:
print(' '.join(row))
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']
]
if solve_sudoku(board):
print_board(board)
else:
print("No solution exists.")
这个程序使用递归方法解决九宫数独问题。它首先遍历整个九宫格,找到一个空格(用'.'表示),然后尝试填入一个数字。如果填入的数字在当前位置是合法的,程序会进入下一层递归,继续填写下一个空格。如果在某个位置无法填入合法的数字,程序会回溯到上一个位置重新尝试其他数字。直到所有的空格都被填满,或者无法找到合法的解决方案。
运行以上代码,程序将输出九宫数独的解答。如果数独问题没有解决方案,程序将输出"No solution exists."
原文地址: https://www.cveoy.top/t/topic/h40O 著作权归作者所有。请勿转载和采集!