我在 n 个皇后的 python 中的程序有问题(有多少种可能的方法可以将 n 个皇后放在一个 nxn 板上)。似乎我的递归有问题,但我真的很无奈。有人能弄清楚出了什么问题吗?
def queens(N):
''' how many ways to place n queens on an NXN board? '''
partial = [] # list representing partial placement of queens on the left columns
return queens_rec(N,partial)
def queens_rec(N, partial):
'''Given a partial solution to the n-Queens Problem ,
return the number of options to place the rest of the queens.
Recursively, in the end we will get the number of the options for
the whole NxN board'''
if len(partial)==N:
return 1
total = 0 #total of full solutions found
row = 0
while row<N:
if isUnderAttack(partial,N,row)==False: #means it is not under Attack
partial+=[row]
total=total+queens_rec(N, partial)
row+=1
current = len(partial)
partial = partial[0:current-1]
else:
row+=1
return total
def isUnderAttack(partial, N, newRow):
'''Checking if we can add a queen in row newRow, to the next column'''
newCol = len(partial)
for col in range(newCol): #not inculding newCol, checking all the previous columns
oldRow = partial[col]
#Checking horizontal attack from existing queen:
if (newRow == oldRow):
return True
if (newCol - col == newRow - oldRow):
return True
if (newCol - col == oldRow - newRow):
return True
return False