八皇后问题python递归
时间: 2023-09-13 10:07:36 浏览: 112
八皇后问题是经典的回溯算法题目,可以通过递归实现。下面是Python代码示例:
```python
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(board, row):
if row == len(board):
# 找到一个解,输出
print(board)
return
for col in range(len(board)):
if is_valid(board, row, col):
board[row] = col
solve(board, row + 1)
board[row] = -1 # 回溯
# 初始化棋盘,-1表示该位置没有皇后
board = [-1] * 8
solve(board, 0)
```
这个代码实现了八皇后问题的求解,其中`is_valid()`函数用于检查当前位置是否合法,`solve()`函数用于递归求解八皇后问题。在`solve()`函数中,为了避免重复计算,用`board`数组记录已经放置的皇后位置。当找到一个解时,输出该解,并回溯到上一个位置,继续搜索其他解。
阅读全文