python 判断数独是否只有一个解
时间: 2023-11-12 14:00:40 浏览: 31
判断数独是否只有一个解可以使用回溯算法。回溯算法可以在数独中填充数字,直到解决方案被找到或者无法继续填充数字。
具体实现步骤如下:
1. 首先,使用一个函数来查找数独中的空单元格。
2. 然后,使用一个函数来检查给定位置是否可以填入给定的数字。
3. 接着,使用回溯算法来尝试在空单元格中填写数字,并在填写数字之前进行验证。
4. 如果数独被填满并且只有一个解,则返回True,否则返回False。
以下是一个示例代码:
```python
def find_empty_location(puzzle):
for row in range(9):
for col in range(9):
if puzzle[row][col] == 0:
return (row, col)
return None
def is_valid(puzzle, row, col, num):
for i in range(9):
if puzzle[row][i] == num:
return False
if puzzle[i][col] == num:
return False
if puzzle[3*(row//3)+i//3][3*(col//3)+i%3] == num:
return False
return True
def solve_puzzle(puzzle):
location = find_empty_location(puzzle)
if not location:
return True
else:
row, col = location
for num in range(1, 10):
if is_valid(puzzle, row, col, num):
puzzle[row][col] = num
if solve_puzzle(puzzle):
return True
puzzle[row][col] = 0
return False
def is_unique_solution(puzzle):
solution_count = 0
if solve_puzzle(puzzle):
solution_count += 1
return solution_count == 1
```
在该代码中,`find_empty_location`函数查找数独中的空单元格。`is_valid`函数检查给定位置是否可以填入给定的数字。`solve_puzzle`函数使用回溯算法来尝试在空单元格中填写数字,并在填写数字之前进行验证。最后,`is_unique_solution`函数使用`solve_puzzle`函数来检查数独是否只有一个解。
您可以使用以下代码测试该函数:
```python
puzzle = [
[5, 3, 0, 0, 7, 0, 0, 0, 0],
[6, 0, 0, 1, 9, 5, 0, 0, 0],
[0, 9, 8, 0, 0, 0, 0, 6, 0],
[8, 0, 0, 0, 6, 0, 0, 0, 3],
[4, 0, 0, 8, 0, 3, 0, 0, 1],
[7, 0, 0, 0, 2, 0, 0, 0, 6],
[0, 6, 0, 0, 0, 0, 2, 8, 0],
[0, 0, 0, 4, 1, 9, 0, 0, 5],
[0, 0, 0, 0, 8, 0, 0, 7, 9]
]
print(is_unique_solution(puzzle)) # True
```
该代码输出True,表示数独只有一个解。