编写程序,利用递归,求八皇后问题
时间: 2024-09-28 14:11:36 浏览: 56
八皇后问题是一个经典的回溯算法示例,它涉及在一个8x8的棋盘上放置八个皇后,使得任意两个皇后都不会在同一行、同一列,以及同一条对角线上。以下是使用Python编写的一个递归解决方案:
```python
def is_safe(board, row, col):
# 检查行、列和左上到右下对角线是否已经有皇后
for i in range(col):
if board[row][i] == 1 or \
board[i][col] == 1 or \
board[row-i][col-i] == 1 or \
board[row+i][col-i] == 1:
return False
return True
def solve EightQueens(board, col):
# 如果已填满所有列,则找到一个解
if col >= 8:
print(board)
return True
# 对每一行尝试放置皇后
for row in range(8):
# 如果当前位置可以放置,继续向下一行搜索
if is_safe(board, row, col):
board[row][col] = 1
# 递归检查下一个位置
if solve_EightQueens(board, col + 1):
return True
# 回溯:如果无法找到解,移除该位置的皇后
board[row][col] = 0
# 如果所有位置都试过,无法找到解,返回False
return False
# 初始化空棋盘
board = [[0] * 8 for _ in range(8)]
# 开始搜索
solve_EightQueens(board, 0)
```
当你运行这个程序时,它会打印出所有可能的八皇后解决方案。注意,由于递归的性质,实际的解决方案数量非常多,并且这种方法的时间复杂度较高,适合小规模的问题。
阅读全文