n皇后问题的递归回溯算法
时间: 2024-06-14 14:04:24 浏览: 139
n皇后问题问题递归算法
n皇后问题是一个经典的回溯算法问题,其目标是在一个n×n的棋盘上放置n个皇后,使得它们互相之间不能攻击到对方。下面是一个递归回溯算法的示例:
```python
def solve_n_queens(n):
def is_safe(board, row, col):
# 检查当前位置的列是否安全
for i in range(row):
if board[i][col] == 'Q':
return False
# 检查当前位置的左上方是否安全
i, j = row - 1, col - 1
while i >= 0 and j >= 0:
if board[i][j] == 'Q':
return False
i -= 1
j -= 1
# 检查当前位置的右上方是否安全
i, j = row - 1, col + 1
while i >= 0 and j < n:
if board[i][j] == 'Q':
return False
i -= 1
j += 1
return True
def backtrack(board, row):
if row == n:
# 找到一个解决方案
solutions.append([''.join(row) for row in board])
return
for col in range(n):
if is_safe(board, row, col):
# 在当前位置放置皇后
board[row][col] = 'Q'
# 继续在下一行放置皇后
backtrack(board, row + 1)
# 回溯,撤销当前位置的皇后
board[row][col] = '.'
solutions = []
# 初始化棋盘
board = [['.' for _ in range(n)] for _ in range(n)]
backtrack(board, 0)
return solutions
```
阅读全文