用python实现8皇后回溯
时间: 2024-01-26 07:44:29 浏览: 26
以下是用Python实现8皇后问题的回溯算法代码:
```python
def is_safe(board, row, col):
# 检查列上是否有皇后
for i in range(row):
if board[i][col] == 1:
return False
# 检查左上方是否有皇后
i, j = row, col
while i >= 0 and j >= 0:
if board[i][j] == 1:
return False
i -= 1
j -= 1
# 检查右上方是否有皇后
i, j = row, col
while i >= 0 and j < len(board):
if board[i][j] == 1:
return False
i -= 1
j += 1
# 该位置是安全的
return True
def solve(board, row):
# 找到一个解,打印出来
if row == len(board):
for r in board:
print(r)
print()
return
# 尝试在当前行的每一列上放置皇后
for col in range(len(board)):
if is_safe(board, row, col):
# 在该位置放置皇后
board[row][col] = 1
# 递归求解下一行
solve(board, row+1)
# 回溯,恢复到没有放皇后的状态
board[row][col] = 0
# 初始化8x8的棋盘
board = [[0 for i in range(8)] for j in range(8)]
# 求解8皇后问题
solve(board, 0)
```
在这个代码中,我们定义了一个 `is_safe` 函数来检查在给定位置上是否可以放置皇后。然后,我们使用 `solve` 函数来递归地求解问题。在该函数中,我们尝试在当前行的每一列上放置皇后,如果该位置是安全的,则递归求解下一行。如果找到了一个解,则打印出来。在回溯时,我们恢复到没有放皇后的状态。最后,我们初始化一个8x8的棋盘,并调用 `solve` 函数来求解8皇后问题。