n皇后 python
时间: 2023-09-15 08:22:58 浏览: 115
n皇后问题是一个经典的回溯算法问题,它要求在一个n×n的棋盘上放置n个皇后,使得皇后彼此之间不能相互攻击,即不能在同一行、同一列或者同一条斜线上。
在Python中解决n皇后问题的思路如下:
1. 使用一个一维数组board来表示棋盘,数组的每个元素表示每一行皇后所在的列数。例如,board[i]=j表示在第i行的第j列放置了一个皇后。
2. 首先定义一个检查函数check(board, row, col),用于检查当前位置是否可以放置皇后。检查过程中需要判断当前位置是否与之前已放置的皇后发生冲突。
3. 使用深度优先搜索(DFS)算法实现,在每一行中从左到右依次尝试放置皇后。如果当前位置通过检查函数的检查,则将当前位置的列数记录在board数组中,并继续递归地处理下一行。
4. 当递归到最后一行时,表示找到了一个解,将board数组中的列数对应的位置输出为皇后的放置情况。
5. 通过调用eightqueen(board, row)函数来启动算法,并传入初始参数,即空的board数组和起始行号。
下面是一个简单的示例代码来解决4皇后问题:
```
def check(board, row, col):
for i in range(row):
if abs(board[i]-col) == 0 or abs(board[i]-col) == abs(i-row):
return False
return True
def eightqueen(board, row):
border = len(board)
if row >= border:
for i, col in enumerate(board):
print('□ ' * col + '■ ' + '□ ' * (len(board) - 1 - col))
print("")
col = 0
while col < border:
for col in range(border):
if check(board, row, col):
board[row = col
eightqueen(board, row+1)
col += 1
board = [0 for i in range(4)]
eightqueen(board, 0)
```
这段代码使用了一个4×4的棋盘,输出了所有合法的皇后放置情况。其中,'□'表示空格,'■'表示皇后。<span class="em">1</span><span class="em">2</span><span class="em">3</span>
#### 引用[.reference_title]
- *1* *2* [N皇后问题——Python解决(超详细注释)](https://blog.csdn.net/m0_62797649/article/details/127250658)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"]
- *3* [N皇后问题(Python实现)](https://blog.csdn.net/qq_43235359/article/details/90605468)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"]
[ .reference_list ]
阅读全文