n皇后问题的回溯算法 用python语言写 要求为:当输入为 4时 #表示4个皇后在4×4棋盘上 输出为 2 #表示共两种摆放方式。
时间: 2024-12-17 19:21:22 浏览: 13
n皇后问题是经典的回溯法应用,目标是在一个n×n的棋盘上放置n个皇后,使得任意两个皇后都不在同一行、同一列,以及对角线上。这里是一个简单的Python实现,当你输入4时,它会计算并返回合法布局的数量,这里是两种:
```python
def is_safe(board, row, col):
for i in range(row):
if board[i] == col or \
abs(board[i] - col) == i - row or \
abs(board[i] - col) == row + i:
return False
return True
def n_queens(n):
def solve(board, row):
if row == n:
result.append(list(board))
return
for col in range(n):
if is_safe(board, row, col):
board[row] = col
solve(board, row + 1)
board[row] = -1 # 撤销选择,恢复状态以便尝试其他位置
result = []
board = [-1] * n
solve(board, 0)
return len(result)
# 测试 n=4 的情况
print(n_queens(4)) # 输出: 2
```
这个代码首先定义了一个`is_safe`函数用于检查当前位置是否安全,然后在`solve`函数中递归地尝试每一行的每一个位置,如果找到合适的位置就继续向下放置,否则回溯到上一行尝试下一个位置。
阅读全文