写一个数独的python 代码
时间: 2023-09-13 13:07:29 浏览: 73
用Python生成数独
好的,关于数独的python代码,我可以帮您提供一个基础的解决方案,代码如下所示:
```python
import numpy as np
def possible_values(board, row, col):
"""
返回在给定行和列中可行的数字
"""
nums = set(range(1, 10))
square_row, square_col = row//3, col//3
square = board[square_row*3:(square_row+1)*3, square_col*3:(square_col+1)*3]
taken = set(board[row, :]) | set(board[:, col]) | set(square.flatten())
return list(nums - taken)
def solve_sudoku(board):
"""
使用回溯法解决数独问题
"""
for i in range(9):
for j in range(9):
if board[i, j] == 0:
for value in possible_values(board, i, j):
board[i, j] = value
if solve_sudoku(board):
return True
board[i, j] = 0
return False
return True
if __name__ == "__main__":
board = np.array([[0, 0, 0, 0, 0, 8, 2, 0, 0],
[0, 0, 6, 0, 0, 0, 0, 7, 0],
[8, 0, 0, 0, 0, 0, 4, 0, 0],
[0, 0, 2, 0, 0, 0, 0, 0, 5],
[0, 0, 0, 0, 0, 0, 0, 0, 0],
[3, 0, 0, 0, 0, 0, 9, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 9, 0],
[0, 5, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 4, 2, 0, 0, 7, 0, 0]])
if solve_sudoku(board):
print(board)
else:
print("无解!")
```
上述代码实现了数独的求解功能,使用的是回溯法。通过递归调用 possible_values 函数来获取可行的数字列表,然后尝试将它们分别填入格子中,如果递归过程中出现无解情况,则回溯并尝试下一个数字。如果成功找到解,则返回 True,否则返回 False。
如需测试其他数独,请将代码中的 board 数组替换为另一个数独即可。
阅读全文