八皇后问题python
时间: 2023-06-24 21:04:55 浏览: 113
八皇后问题是一个经典的回溯算法问题,需要在8x8的棋盘上放置8个皇后,使得每个皇后都不会互相攻击(即不在同一行、同一列、同一对角线上)。
以下是使用Python实现的八皇后问题代码:
```python
def is_valid(board, row, col):
# 检查同一列中是否有皇后
for i in range(row):
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 < len(board):
if board[i] == j:
return False
i, j = i - 1, j + 1
return True
def backtracking(board, row, res):
# 如果已经放置了8个皇后,将当前解添加到结果列表中
if row == len(board):
res.append(board[:])
return
# 尝试在当前行的每个列中放置皇后
for col in range(len(board)):
if is_valid(board, row, col):
board[row] = col
backtracking(board, row + 1, res)
board[row] = -1
def solve_n_queens(n):
board = [-1] * n
res = []
backtracking(board, 0, res)
return res
```
该代码使用回溯算法,首先定义了一个 `is_valid` 函数,用于检测当前位置是否可以放置皇后。然后定义了一个 `backtracking` 函数,用于递归地尝试在每一行放置皇后。最后,定义了一个 `solve_n_queens` 函数,用于调用 `backtracking` 函数并返回结果。
使用该函数解决八皇后问题的示例如下:
```python
res = solve_n_queens(8)
for board in res:
print(board)
```
输出结果为所有符合要求的解法。
阅读全文