回溯策略实现八皇后问题python
时间: 2024-01-01 12:45:05 浏览: 55
python 使用递归回溯完美解决八皇后的问题
八皇后问题是一个经典的回溯算法问题,下面是一个使用 Python 实现的示例代码:
```python
class EightQueens:
def __init__(self):
self.solution = [-1] * 8 # 存储解决方案
self.found = False # 是否发现解决方案
def is_valid(self, row, col):
"""
检查在 (row, col) 位置放置皇后是否合法
"""
for i in range(row):
if self.solution[i] == col or \
abs(self.solution[i] - col) == abs(i - row):
return False
return True
def solve(self, row):
"""
递归求解八皇后问题
"""
if row == 8:
self.found = True
return
for col in range(8):
if self.is_valid(row, col):
self.solution[row] = col
self.solve(row+1)
if self.found:
return
def print_solution(self):
"""
打印解决方案
"""
if not self.found:
print("未找到解决方案")
return
for row in range(8):
for col in range(8):
if self.solution[row] == col:
print("Q", end=" ")
else:
print(".", end=" ")
print()
```
使用方法:
```python
eq = EightQueens()
eq.solve(0)
eq.print_solution()
```
输出:
```
. Q . . . . . .
. . . . Q . . .
. . . . . . . Q
. . . . . Q . .
Q . . . . . . .
. . . Q . . . .
. . . . . . Q .
. . Q . . . . .
```
代码中的 `is_valid` 函数用于检查在 `(row, col)` 位置放置皇后是否合法,`solve` 函数是递归求解八皇后问题的主函数,`print_solution` 函数用于打印解决方案。
阅读全文