用python写一个解数独的程序并加上注释
时间: 2024-05-02 12:23:00 浏览: 15
好的,以下是用 Python 写的一个解数独的程序,配有注释说明:
```python
# 数独的题目,使用0表示空格
grid = [[3, 0, 6, 5, 0, 8, 4, 0, 0],
[5, 2, 0, 0, 0, 0, 0, 0, 0],
[0, 8, 7, 0, 0, 0, 0, 3, 1],
[0, 0, 3, 0, 0, 0, 0, 2, 0],
[9, 0, 0, 8, 0, 0, 0, 0, 5],
[0, 5, 0, 0, 0, 0, 6, 0, 0],
[1, 3, 0, 0, 0, 0, 2, 5, 0],
[0, 0, 0, 0, 0, 0, 0, 7, 4],
[0, 0, 5, 2, 0, 6, 3, 0, 0]]
def solve(grid):
"""
解数独函数,返回解决方案
"""
# 获取一个未填写的位置,如果没有则返回True,表示已解决
find = get_blank(grid)
if not find:
return True
else:
row, col = find
# 尝试将数字1-9填入这个位置并进行验证
for num in range(1, 10):
if is_valid(grid, row, col, num):
grid[row][col] = num
# 递归调用,继续尝试解决剩下的部分
if solve(grid):
return True
# 如果上面的解决方案没有返回True,则将当前位置重新赋值为0,进行下一次尝试
grid[row][col] = 0
# 如果尝试了1-9都无法解决,则返回False
return False
def get_blank(grid):
"""
获取一个未填写的位置
"""
for row in range(9):
for col in range(9):
if grid[row][col] == 0:
return (row, col)
return None
def is_valid(grid, row, col, num):
"""
验证填写的数字是否合法
"""
# 验证行
for i in range(9):
if grid[row][i] == num:
return False
# 验证列
for i in range(9):
if grid[i][col] == num:
return False
# 验证3x3的区域
y = (row // 3) * 3
x = (col // 3) * 3
for i in range(3):
for j in range(3):
if grid[y+i][x+j] == num:
return False
# 如果以上验证都通过,表明填写的数字是合法的
return True
# 调用解数独函数
solve(grid)
# 打印解决方案
for i in range(9):
for j in range(9):
print(grid[i][j], end=" ")
print()
```
希望这个程序对你有帮助!