用Python写皇后问题
时间: 2024-05-13 11:11:17 浏览: 49
基于Python使用遗传算法求解 n 皇后问题【100011488】
5星 · 资源好评率100%
皇后问题是一个经典的回溯算法问题,标是在一个N×N的棋盘上放置N个皇后,使得它们互相之间不能攻击到对方。下面是用Python实现皇后问题的一种方法:
```python
def solve_n_queens(n):
# 初始化棋盘
board = [['.' for _ in range(n)] for _ in range(n)]
result = []
def is_valid(row, col):
# 检查当前位置是否可以放置皇后
for i in range(row):
if board[i][col] == 'Q':
return False
if col-row+i >= 0 and board[i][col-row+i] == 'Q':
return False
if col+row-i < n and board[i][col+row-i] == 'Q':
return False
return True
def backtrack(row):
# 回溯函数
if row == n:
# 找到一个解,将结果加入到结果列表中
result.append([''.join(row) for row in board])
return
for col in range(n):
if is_valid(row, col):
# 放置皇后
board[row][col] = 'Q'
# 继续下一行的回溯
backtrack(row + 1)
# 恢复当前位置为空
board[row][col] = '.'
backtrack(0)
return result
# 测试
n = 4
solutions = solve_n_queens(n)
for solution in solutions:
for row in solution:
print(row)
print()
```
这段代码使用了回溯算法来解决皇后问题。首先定义了一个`is_valid`函数来判断当前位置是否可以放置皇后,然后定义了一个`backtrack`函数来进行回溯搜索。在回溯函数中,首先判断是否已经找到了一个解,如果是则将结果加入到结果列表中;否则,依次尝试在当前行的每个位置放置皇后,并继续下一行的回溯。最后,调用`solve_n_queens`函数来解决皇后问题,并打印出所有的解。
阅读全文