n皇后问题回溯法python
时间: 2023-07-25 17:21:18 浏览: 86
好的,下面是一个使用回溯法解决n皇后问题的Python代码:
```python
class Solution:
def solveNQueens(self, n: int) -> List[List[str]]:
# 初始化棋盘
board = [['.' for _ in range(n)] for _ in range(n)]
# 存储所有可行的解法
res = []
# 回溯函数
def backtrack(board, row):
# 如果已经到达最后一行,说明找到了一组解法,将其加入结果列表中
if row == len(board):
res.append(["".join(row) for row in board])
return
# 遍历每一列
for col in range(len(board)):
# 检查当前位置是否合法
if not self.is_valid(board, row, col):
continue
# 将皇后放在当前位置
board[row][col] = 'Q'
# 继续向下搜索
backtrack(board, row + 1)
# 回溯,将皇后从当前位置移除
board[row][col] = '.'
# 检查当前位置是否合法
def is_valid(self, board, row, col):
# 检查当前列是否有皇后
for i in range(row):
if board[i][col] == 'Q':
return False
# 检查左上方是否有皇后
for i, j in zip(range(row-1, -1, -1), range(col-1, -1, -1)):
if board[i][j] == 'Q':
return False
# 检查右上方是否有皇后
for i, j in zip(range(row-1, -1, -1), range(col+1, len(board))):
if board[i][j] == 'Q':
return False
return True
# 从第一行开始搜索
backtrack(board, 0)
return res
```
这段代码通过递归回溯的方式搜索所有可能的解法,如果当前位置合法,则将皇后放在当前位置,继续向下搜索;如果当前位置不合法,则跳过当前位置,继续搜索下一列。如果已经到达最后一行,则说明找到了一组解法,将其加入结果列表中。
阅读全文