用python简单写一个八皇后问题
时间: 2023-10-16 07:07:32 浏览: 92
python实现的八皇后问题
八皇后问题是一个经典的回溯算法问题,以下是一个简单的Python实现:
```python
def is_valid(board, row, col):
"""
判断在(row, col)位置放置皇后是否合法
"""
n = len(board)
# 检查同一列是否有皇后
for i in range(n):
if board[i][col]:
return False
# 检查左上方是否有皇后
i, j = row - 1, col - 1
while i >= 0 and j >= 0:
if board[i][j]:
return False
i, j = i - 1, j - 1
# 检查右上方是否有皇后
i, j = row - 1, col + 1
while i >= 0 and j < n:
if board[i][j]:
return False
i, j = i - 1, j + 1
return True
def solve_n_queens(board, row, result):
"""
在第row行放置皇后
"""
n = len(board)
if row == n:
# 找到一组解,将其加入结果列表
result.append([''.join(['Q' if board[i][j] else '.' for j in range(n)]) for i in range(n)])
return
for col in range(n):
if is_valid(board, row, col):
board[row][col] = True
solve_n_queens(board, row + 1, result)
board[row][col] = False
def n_queens(n):
"""
解决n皇后问题,返回所有解
"""
board = [[False] * n for _ in range(n)]
result = []
solve_n_queens(board, 0, result)
return result
```
这个算法的思路是采用递归回溯的方式,从第一行开始,依次尝试在每一列放置皇后。如果在当前位置放置皇后不合法,则回溯到上一行重新尝试。当到达最后一行时,说明已经找到一组解,将其加入结果列表。最终返回所有的解。
阅读全文