n皇后问题的广度优先搜索python代码
时间: 2023-11-12 16:14:49 浏览: 103
以下是 n 皇后问题的广度优先搜索 Python 代码:
```python
from queue import Queue
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 solve_n_queens(n):
q = Queue()
q.put([])
solutions = []
while not q.empty():
board = q.get()
row = len(board)
if row == n:
solutions.append(board)
else:
for col in range(n):
if is_valid(board, row, col):
q.put(board + [col])
return solutions
# 测试
solutions = solve_n_queens(4)
print(solutions) # [[1, 3, 0, 2], [2, 0, 3, 1]]
```
该代码使用队列实现广度优先搜索,依次枚举每一行中皇后的位置,如果该位置合法,则将该位置加入队列中,并继续搜索下一行。当搜索到最后一行时,将该解加入解集中。最终返回所有解集。
阅读全文