8皇后问题的回溯算法Python
时间: 2023-12-25 22:28:37 浏览: 80
八皇后问题的回溯算法。
以下是Python中八皇后问题的回溯算法实现:
```python
def conflict(state, nextX):
nextY = len(state)
for i in range(nextY):
if abs(state[i]-nextX) in (0, nextY-i):
return True
return False
def queens(num=8, state=()):
for pos in range(num):
if not conflict(state, pos):
if len(state) == num-1:
yield (pos,)
else:
for result in queens(num, state+(pos,)):
yield (pos,) + result
def prettyprint(solution):
def line(pos, length=len(solution)):
return '. ' * (pos) + '♛ ' + '. '*(length-pos-1)
for pos in solution:
print(line(pos))
count = 0
for solution in queens(8):
count += 1
print('Solution', count)
prettyprint(solution)
```
这段代码中,`conflict`函数用于判断当前位置是否与之前的皇后位置冲突,`queens`函数用于递归求解八皇后问题,`prettyprint`函数用于将结果输出为可读性更好的形式。最后,我们通过循环调用`queens`函数来输出所有的解。
阅读全文