python回溯法编码实现n皇后问题
时间: 2023-08-05 12:43:03 浏览: 51
好的,下面是一份Python实现的n皇后问题的回溯法代码:
```python
def n_queens(n):
# 初始化棋盘,全部填充为0
board = [[0 for x in range(n)] for y in range(n)]
# 开始放置皇后
if n_queens_helper(board, 0, n) == False:
return False
# 打印棋盘
print_board(board)
return True
def n_queens_helper(board, col, n):
# 如果所有皇后都放置完毕,返回True
if col >= n:
return True
# 尝试在当前列中逐行放置皇后
for row in range(n):
if is_safe(board, row, col, n):
# 如果当前位置可行,标记为1
board[row][col] = 1
# 递归尝试下一列
if n_queens_helper(board, col + 1, n) == True:
return True
# 如果递归失败,标记当前位置为0,回溯到上一步
board[row][col] = 0
# 如果所有行都尝试完毕,返回False
return False
def is_safe(board, row, col, n):
# 检查当前行列是否安全
for i in range(col):
if board[row][i] == 1:
return False
# 检查左上角到右下角的对角线是否安全
for i, j in zip(range(row, -1, -1), range(col, -1, -1)):
if board[i][j] == 1:
return False
# 检查右上角到左下角的对角线是否安全
for i, j in zip(range(row, n, 1), range(col, -1, -1)):
if board[i][j] == 1:
return False
# 如果所有检查都通过,返回True
return True
def print_board(board):
for row in board:
print(row)
```
这份代码中,我们首先初始化了一个n*n的棋盘,并将所有位置初始化为0。然后从第0列开始,逐列尝试在棋盘上放置皇后,如果当前位置不冲突,就将该位置标记为1,然后递归尝试下一列。如果递归成功,返回True,否则将该位置标记为0,回溯到上一步。如果所有行都尝试完毕,返回False。
在判断当前位置是否安全时,我们需要检查当前行、当前列以及两个对角线是否有其他皇后。如果有,返回False,否则返回True。
最后我们还定义了一个打印棋盘的函数,方便调试和查看结果。
相关推荐
![py](https://img-home.csdnimg.cn/images/20210720083646.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)