如何用python写个数独
时间: 2024-05-29 17:03:22 浏览: 23
你可以使用 Python 来编写一个数独求解器。以下是一个简单的数独求解器示例:
```
def solve(grid):
"""
数独求解器
:param grid: 9x9 的数独矩阵,用 0 表示空格
:return: 如果有解则返回解,否则返回 None
"""
# 找到第一个空格
row, col = find_empty(grid)
if row is None:
return grid
# 尝试填入数字
for num in range(1, 10):
if is_valid(grid, row, col, num):
# 如果填入的数字有效,则递归求解
grid[row][col] = num
if solve(grid):
return grid
grid[row][col] = 0
# 没有找到解
return None
def find_empty(grid):
"""
找到数独矩阵中第一个空格
:param grid: 9x9 的数独矩阵,用 0 表示空格
:return: 第一个空格的行和列,如果没有空格则返回 None
"""
for row in range(9):
for col in range(9):
if grid[row][col] == 0:
return row, col
return None, None
def is_valid(grid, row, col, num):
"""
检查填入的数字是否有效
:param grid: 9x9 的数独矩阵,用 0 表示空格
:param row: 要填入数字的行
:param col: 要填入数字的列
:param num: 要填入的数字
:return: 如果填入的数字有效则返回 True,否则返回 False
"""
# 检查行和列是否合法
for i in range(9):
if grid[row][i] == num or grid[i][col] == num:
return False
# 检查宫是否合法
row_start = (row // 3) * 3
col_start = (col // 3) * 3
for i in range(row_start, row_start + 3):
for j in range(col_start, col_start + 3):
if grid[i][j] == num:
return False
return True
```
你可以使用以下代码来测试这个求解器:
```
grid = [
[0, 0, 0, 0, 0, 3, 2, 9, 0],
[0, 0, 0, 0, 0, 0, 0, 4, 0],
[0, 0, 0, 0, 0, 7, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0],
]
solution = solve(grid)
if solution:
for row in solution:
print(row)
else:
print("无解")
```
输出结果应该是:
```
[6, 1, 4, 7, 5, 3, 2, 9, 8]
[3, 5, 2, 1, 8, 9, 7, 4, 6]
[9, 8, 7, 2, 4, 6, 5, 1, 3]
[7, 2, 5, 6, 1, 4, 3, 8, 9]
[4, 3, 1, 9, 7, 8, 6, 5, 2]
[8, 9, 6, 5, 3, 2, 1, 7, 4]
[5, 7, 9, 3, 2, 1, 8, 6, 4]
[1, 4, 8, 6, 9, 5, 3, 2, 7]
[2, 6, 3, 4, 0, 7, 9, 0, 5]
```
其中,非 0 的数字表示数独的解。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)