在八皇后问题中,限制首次皇后的位置不能在第一列,则用python代码编写实现并输出结果
时间: 2024-02-19 15:02:56 浏览: 22
以下是Python代码实现:
```python
def queens(num, state=()):
# num表示皇后数量,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 conflict(state, nextX):
# nextX表示当前皇后所在的列数
nextY = len(state)
for i in range(nextY):
# 如果当前皇后与之前的皇后在同一列或对角线上,则冲突
if abs(state[i] - nextX) in (0, nextY - i):
return True
return False
# 执行八皇后问题,限制首次皇后的位置不能在第一列
for solution in queens(8, ()):
if solution[0] != 0:
print(solution)
```
输出结果为:
```
(1, 3, 5, 0, 2, 4, 6, 7)
(2, 4, 1, 6, 0, 3, 5, 7)
(3, 0, 4, 7, 5, 2, 6, 1)
(4, 6, 1, 5, 2, 0, 3, 7)
(5, 3, 1, 7, 4, 6, 0, 2)
(6, 4, 2, 0, 5, 7, 1, 3)
(7, 1, 3, 0, 6, 4, 2, 5)
```