计算N Queens函数生成的解决方案的数量。

时间:2017-05-17 01:49:36

标签: python list count

我编写了一个函数,可以为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。我不确定如何在函数本身中实现这样的东西。

1 个答案:

答案 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

基本情况返回一个,因为它打印了一个有效的解决方案,然后,在进行递归调用之后,总结到目前为止找到的解决方案的数量,然后再转到下一个递归分支。