我当前正在做一个python
练习,当给定大小为n
的国际象棋棋盘时,我将返回一个具有最大皇后数量的解决方案,这样就不会有两个皇后互相攻击。
因此,一种解决方案要求没有两个皇后共享相同的行,列或对角线。
我目前能够生成木板,但问题出在我的代码的第20行,即if bd not in soln
。由于某种原因,我无法识别该行代码,因此无法正确执行,并将正确的电路板正确地附加到我的解决方案集中。
如果有人可以帮助您确定问题,我将非常感激。
import random
def queensol(n):
"""Find the number of solutions to placing Queens on a chessboard of size n"""
size = n
rng = random.Random()
tries = 0
bd = list(range(size))
soln = []
while True:
tries += 1
rng.shuffle(bd)
correct = 0
for queen_index in range(size):
if queen_noclash(bd, queen_index):
correct += 1
board_valid = correct == size
if board_valid:
if bd not in soln:
soln.append(bd)
print(soln)
def no_diagonal(x1, y1, x2, y2):
dx = abs(x1-x2)
dy = abs(y1-y2)
# print('dx',dx)
# print('dy',dy)
if dx == dy:
return False
else:
return True
def queen_noclash(bd, queen):
correct = 0
for left_queen in range(queen):
left_queen_x = left_queen
left_queen_y = bd[left_queen]
queen_x = queen
queen_y = bd[queen]
if no_diagonal(left_queen_x, left_queen_y, queen_x, queen_y):
correct += 1
if correct == queen:
return True
else:
return False
queensol(4)
答案 0 :(得分:0)
问题在于bd是一个对象。您要将同一对象附加到板上。因此,即使bd更改train = df.loc[~df['x'].isin(['a','b'])]
test = df.loc[df['x'].isin(['a','b'])]
始终会为False,因为您正在比较同一对象。每次追加到soln数组时,都应使用list(bd)创建一个新对象。我已经在下面的代码中解决了这个问题。
bd not in soln