我编写了一个函数,可以为N皇后问题提供所有可能的解决方案。它接受来自用户的整数输入,即表的维度。即如果用户输入4,则它将列出4x4表的所有可能解决方案。当n = 4是输入时输出如下:
[1, 3, 0, 2]
[2, 0, 3, 1]
这是我使用的功能:
def nQueens(partialSolution, n):
allPositions = getPositions(partialSolution, n)
if len(partialSolution) == n:
print(partialSolution)
else:
for item in allPositions:
partialSolution.append(item)
nQueens(partialSolution, n)
partialSolution.pop()
nQueens([], n)
在这个函数的某个地方,我需要实现一个count变量,最后会输出解决方案的数量。例如,如果输入4,那么它将输出2,因为有两个解决方案:
[1, 3, 0, 2]
[2, 0, 3, 1]
2
我尝试了以下但是它没有工作:
count = 0
for i in partialSolution:
count+=1
print(count)
因为它不在函数本身内,所以我得到一个错误,说没有定义partialSolution。我不确定如何在函数本身中实现这样的东西。
答案 0 :(得分:1)
假设您的代码是正确的,您可以尝试返回函数的计数,基本情况是它实际打印解决方案时,这样(小心,未经测试的代码):
def nQueens(partialSolution, n):
allPositions = getPositions(partialSolution, n)
if len(partialSolution) == n:
print(partialSolution)
return 1
else:
ctr = 0
for item in allPositions:
partialSolution.append(item)
ctr += nQueens(partialSolution, n)
partialSolution.pop()
return ctr
基本情况返回一个,因为它打印了一个有效的解决方案,然后,在进行递归调用之后,总结到目前为止找到的解决方案的数量,然后再转到下一个递归分支。