用python实现回溯法求n皇后问题
时间: 2024-01-15 11:51:25 浏览: 81
python回溯法解决n皇后问题
下面是 Python 代码实现回溯法求解n皇后问题:
```python
def is_valid(board, row, col, n):
# 检查列是否有冲突
for i in range(row):
if board[i][col] == 'Q':
return False
# 检查左上方是否有冲突
for i, j in zip(range(row-1, -1, -1), range(col-1, -1, -1)):
if board[i][j] == 'Q':
return False
# 检查右上方是否有冲突
for i, j in zip(range(row-1, -1, -1), range(col+1, n)):
if board[i][j] == 'Q':
return False
return True
def backtrack(board, row, n, res):
if row == n:
res.append([''.join(r) for r in board])
return
for col in range(n):
if is_valid(board, row, col, n):
board[row][col] = 'Q'
backtrack(board, row+1, n, res)
board[row][col] = '.'
def solve_n_queens(n):
board = [['.' for _ in range(n)] for _ in range(n)]
res = []
backtrack(board, 0, n, res)
return res
```
这里使用一个二维数组来表示棋盘,其中 '.' 表示空位置,'Q'表示皇后。is_valid 函数用于检查在当前位置放置皇后是否合法。backtrack 函数则是回溯的核心部分,用于尝试在当前行放置皇后,并继续向下一行尝试放置。如果所有行都成功放置皇后,则将当前的棋盘状态加入到结果中。最后调用 solve_n_queens 函数即可得到所有的解。
阅读全文