用python解决八皇后问题
时间: 2024-01-04 15:03:50 浏览: 161
Python解决八皇后问题示例
八皇后问题是一个著名的搜索问题,要求在一个 8x8 的棋盘上放置 8 个皇后,使得它们之间互不攻击。每个皇后都可以攻击同一行、同一列、同一对角线上的任意单位。
下面是一个用 Python 语言解决八皇后问题的算法:
```python
def is_valid(board, row, col):
# 检查同一列是否有皇后
for i in range(row):
if board[i][col] == 1:
return False
# 检查左上方是否有皇后
i, j = row - 1, col - 1
while i >= 0 and j >= 0:
if board[i][j] == 1:
return False
i -= 1
j -= 1
# 检查右上方是否有皇后
i, j = row - 1, col + 1
while i >= 0 and j < len(board):
if board[i][j] == 1:
return False
i -= 1
j += 1
return True
def solve(board, row):
if row == len(board):
# 找到了一组解
return True
for col in range(len(board)):
if is_valid(board, row, col):
# 在当前位置放置皇后
board[row][col] = 1
if solve(board, row + 1):
return True
# 回溯
board[row][col] = 0
return False
def n_queens(n):
board = [[0] * n for _ in range(n)]
if solve(board, 0):
return board
return []
print(n_queens(8))
```
算法的基本思路是使用回溯法,从第一行开始依次尝试每一列是否可以放置皇后。如果当前位置可以放置皇后,就继续尝试下一行;如果不行,就回溯到上一行,换一列重新
阅读全文