【发布时间】:2017-10-01 00:47:54
【问题描述】:
我有一个递归函数来计算 8 个皇后可以在 8x8 棋盘上放置而不相互交叉(对于一个班级)的数量。它运行良好并给出了正确的排列,有趣的事情发生在我让程序尝试计算答案的数量时——它不断地将我的计数器归零。当我手动计算排列时,它是 92(这是正确的)。
def can_be_extended_to_solution(perm):
i = len(perm) - 1
for j in range(i):
if i - j == abs(perm[i] - perm[j]):
return False
return True
def extend(perm,count, n):
if len(perm)==n:
count=count+1
print "cycle counter= ",count
print(perm)
for k in range(n):
if k not in perm:
perm.append(k)
if can_be_extended_to_solution(perm): # if it works
extend(perm, count, n)
perm.pop()
extend(perm = [], count=0, n = 8)
【问题讨论】:
-
对,长度为 8 的排列被视为答案。所以每次它找到一个有 8 个皇后的解决方案时,它应该增加计数。最后的计数应该是可能的 8 个皇后的排列数,但由于某种原因,计数在每次迭代后都会返回 0。