python 数独生成
时间: 2023-10-14 13:27:09 浏览: 38
生成数独可以使用递归回溯算法。下面是一个简单的 Python 代码示例:
```python
import random
def generate_sudoku():
board = [[0 for _ in range(9)] for _ in range(9)]
solve_sudoku(board)
# 随机挖去一些数字
for i in range(81):
x, y = i // 9, i % 9
if random.random() > 0.5:
board[x][y] = 0
return board
def solve_sudoku(board):
if not find_unassigned(board):
return True
row, col = find_unassigned(board)
for num in range(1, 10):
if is_valid(board, row, col, num):
board[row][col] = num
if solve_sudoku(board):
return True
board[row][col] = 0
return False
def find_unassigned(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, row, col, num):
for i in range(9):
if board[row][i] == num or board[i][col] == num:
return False
box_row, box_col = row - row % 3, col - col % 3
for i in range(box_row, box_row + 3):
for j in range(box_col, box_col + 3):
if board[i][j] == num:
return False
return True
```
该算法使用 `generate_sudoku()` 函数生成一个空数独,并在其基础上使用 `solve_sudoku()` 函数填充数独。`is_valid()` 函数用于判断填充数字是否合法。最后,随机挖去一些数字以生成最终的数独。
你可以使用以下代码测试该函数:
```python
board = generate_sudoku()
for row in board:
print(row)
```
输出结果类似于:
```
[0, 0, 8, 0, 9, 3, 0, 0, 0]
[0, 0, 0, 0, 0, 0, 0, 0, 0]
[0, 0, 0, 0, 0, 0, 0, 0, 0]
[1, 0, 0, 0, 0, 0, 0, 0, 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 表示空格。