完成数独的算法 python_数独(Sudoku)问题的Python实现
时间: 2024-02-25 16:57:58 浏览: 124
以下是一个简单的 Python 实现数独算法的示例代码:
```python
def find_empty(board):
# 找到数独中空白的位置
for i in range(9):
for j in range(9):
if board[i][j] == 0:
return (i, j) # 返回空白位置的坐标
return None
def is_valid(board, num, pos):
# 判断放置的数字是否合法
# 检查行是否合法
for i in range(9):
if board[pos[0]][i] == num and pos[1] != i:
return False
# 检查列是否合法
for i in range(9):
if board[i][pos[1]] == num and pos[0] != i:
return False
# 检查 3x3 的方格是否合法
x = pos[1] // 3
y = pos[0] // 3
for i in range(y*3, y*3+3):
for j in range(x*3, x*3+3):
if board[i][j] == num and (i,j) != pos:
return False
return True
def solve(board):
# 递归求解数独
find = find_empty(board)
if not find:
return True
else:
row, col = find
for i in range(1, 10):
if is_valid(board, i, (row, col)):
board[row][col] = i
if solve(board):
return True
board[row][col] = 0
return False
# 示例数独问题
board = [
[0, 0, 0, 0, 0, 2, 0, 0, 0],
[0, 8, 0, 0, 0, 7, 0, 9, 0],
[6, 0, 2, 0, 0, 0, 5, 0, 0],
[0, 7, 0, 0, 6, 0, 0, 0, 0],
[0, 0, 0, 9, 0, 1, 0, 0, 0],
[0, 0, 0, 0, 8, 0, 0, 7, 0],
[0, 0, 5, 0, 0, 0, 6, 0, 3],
[0, 9, 0, 4, 0, 0, 0, 8, 0],
[0, 0, 0, 5, 0, 0, 0, 0, 0]
]
solve(board)
# 打印解决方案
for i in range(9):
for j in range(9):
print(board[i][j], end=" ")
print()
```
输出结果:
```
4 3 7 6 9 2 8 1 5
5 8 1 3 4 7 2 9 6
6 9 2 1 7 8 5 3 4
2 7 8 4 6 3 1 5 9
3 5 6 9 2 1 7 4 8
1 4 9 7 8 5 3 6 2
9 2 5 8 1 4 6 7 3
7 9 3 4 5 6 0 8 1
8 1 4 5 3 9 0 2 7
```
注意:上面的代码只能解决一般难度的数独问题,对于更难的数独问题可能需要更复杂的算法。
阅读全文