八皇后回溯法python
时间: 2023-10-17 21:36:09 浏览: 86
八皇后问题是一个经典的回溯算法问题,下面是使用Python实现的八皇后问题的回溯算法:
```python
def is_safe(board, row, col):
# 检查当前位置的上方是否有皇后冲突
for i in range(row):
if board[i] == col:
return False
# 检查左上方是否有皇后冲突
i = row - 1
j = col - 1
while i >= 0 and j >= 0:
if board[i] == j:
return False
i -= 1
j -= 1
# 检查右上方是否有皇后冲突
i = row - 1
j = col + 1
while i >= 0 and j < len(board):
if board[i] == j:
return False
i -= 1
j += 1
return True
def solve_n_queens(n):
board = [-1] * n # 存储每一行皇后所在的列号
result = []
def backtrack(row):
if row == n:
# 找到了一个解,将结果添加到列表中
result.append(board[:])
return
for col in range(n):
if is_safe(board, row, col):
# 当前位置安全,可以放置皇后
board[row] = col
backtrack(row + 1)
# 回溯,尝试下一个位置
board[row] = -1
backtrack(0)
return result
# 测试
n = 8
solutions = solve_n_queens(n)
print("共有{}个解:".format(len(solutions)))
for solution in solutions:
print(solution)
```
上述代码中,`is_safe`函数用于判断当前位置是否安全,即没有与之前放置的皇后冲突。`solve_n_queens`函数使用回溯算法求解八皇后问题,其中`board`列表存储了每一行皇后所在的列号,`result`列表用于存储所有解。
你可以将上述代码保存为一个Python文件并运行,就可以得到八皇后问题的所有解。
阅读全文