使用python写一个回溯法求n皇后问题
时间: 2024-01-15 21:52:27 浏览: 55
好的,下面是使用 Python 编写的 n 皇后问题的回溯算法代码:
```python
def solve_n_queens(n):
# 定义棋盘
board = [['.' for j in range(n)] for i in range(n)]
# 定义列、对角线、反对角线是否被占用的列表
col_occupied = [False] * n
diagonal_occupied = [False] * (2 * n - 1)
anti_diagonal_occupied = [False] * (2 * n - 1)
# 定义结果列表
result = []
# 定义回溯函数
def backtrack(row):
if row == n:
# 将当前棋盘加入结果列表
result.append([''.join(row) for row in board])
return
for col in range(n):
if not col_occupied[col] and not diagonal_occupied[row + col] and not anti_diagonal_occupied[row - col + n - 1]:
# 如果当前位置没有被占用,则放置皇后
board[row][col] = 'Q'
col_occupied[col] = True
diagonal_occupied[row + col] = True
anti_diagonal_occupied[row - col + n - 1] = True
# 继续搜索下一行
backtrack(row + 1)
# 回溯到当前层时,需要将皇后拿走并将占用标记清除
board[row][col] = '.'
col_occupied[col] = False
diagonal_occupied[row + col] = False
anti_diagonal_occupied[row - col + n - 1] = False
# 从第一行开始搜索
backtrack(0)
return result
```
使用方法:
```python
n = 4 # 皇后的数量
result = solve_n_queens(n)
for board in result:
for row in board:
print(row)
print()
```
输出结果:
```
.Q..
...Q
Q...
..Q.
..Q.
Q...
...Q
.Q..
```
其中,'Q' 表示皇后,'.' 表示空位。每个结果都是一个 n × n 的矩阵,表示一种可行的摆放方案。
阅读全文