完成数独的算法 python_数独(Sudoku)问题的Python实现
时间: 2024-02-20 15:01:45 浏览: 139
好的,关于数独问题的Python实现,我可以给您提供一个基本的算法:
首先,我们需要一个函数来判断某个数字是否可以放在数独的某个位置上,这个函数我们命名为“check()”,实现如下:
```python
def check(board, row, col, num):
# 判断同一行是否有相同的数字
for i in range(9):
if board[row][i] == num:
return False
# 判断同一列是否有相同的数字
for i in range(9):
if board[i][col] == num:
return False
# 判断同一个3*3的宫格内是否有相同的数字
start_row = (row // 3) * 3
start_col = (col // 3) * 3
for i in range(start_row, start_row + 3):
for j in range(start_col, start_col + 3):
if board[i][j] == num:
return False
return True
```
接下来,我们需要一个递归函数来填充数独,这个函数我们命名为“solve()”,实现如下:
```python
def solve(board, row, col):
# 如果当前行和列都大于等于9,表示已经填充完毕,返回True
if row >= 9 and col >= 9:
return True
# 如果当前列大于等于9,表示当前行填充完毕,转到下一行
if col >= 9:
row += 1
col = 0
# 如果当前位置已经有数字,跳过,转到下一列
if board[row][col] != 0:
return solve(board, row, col + 1)
# 尝试填充数字1~9
for i in range(1, 10):
if check(board, row, col, i):
board[row][col] = i
# 如果能够成功填充,继续填充下一个位置
if solve(board, row, col + 1):
return True
# 如果填充失败,回溯,将当前位置的数字清零
board[row][col] = 0
# 如果1~9都不能填充成功,返回False
return False
```
最后,我们需要一个函数来调用“solve()”函数,实现如下:
```python
def solveSudoku(board):
solve(board, 0, 0)
```
这样,我们就完成了数独的算法实现。调用“solveSudoku()”函数,传入一个9*9的二维数组即可求解数独。
阅读全文