使用python写一个回溯法求n皇后问题
时间: 2023-09-07 19:11:03 浏览: 112
好的,下面是使用 Python 编写的 n 皇后问题的回溯法解法:
```python
def is_valid(board, row, col):
"""
检查在(row,col)位置上是否可以放置皇后。
"""
n = len(board)
# 检查列是否有皇后
for i in range(n):
if board[i][col] == 1:
return False
# 检查右上方是否有皇后
i, j = row - 1, col + 1
while i >= 0 and j < n:
if board[i][j] == 1:
return False
i, j = i - 1, j + 1
# 检查左上方是否有皇后
i, j = row - 1, col - 1
while i >= 0 and j >= 0:
if board[i][j] == 1:
return False
i, j = i - 1, j - 1
return True
def n_queens_helper(board, row, res):
"""
回溯函数,处理当前行和结果。
"""
n = len(board)
if row == n:
res.append(board.copy())
return
for col in range(n):
if is_valid(board, row, col):
board[row][col] = 1
n_queens_helper(board, row + 1, res)
board[row][col] = 0
def n_queens(n):
"""
主函数,返回所有可能的解决方案。
"""
board = [[0] * n for _ in range(n)]
res = []
n_queens_helper(board, 0, res)
return res
```
这里的 `is_valid` 函数用来检查在某个位置上是否可以放置皇后,`n_queens_helper` 函数是回溯函数,处理当前行和结果,`n_queens` 是主函数,返回所有可能的解决方案。
阅读全文