繁体   English   中英

8 Queens Python实现空列表

[英]8 Queens Python implementation empty lists

def check(a,i):
   n = len(a)
   return not (i in a or
               i+n in [a[j]+j for j in range(n)] or
               i-n in [a[j]-j for j in range(n)]) 

def rsearch(N):
   global a
   global b

   if len(a) == N:
      b.append(a) #<-- this works HERE
      print(a) #<-- this also works HERE
      return True

   z = False
   for i in range(N):
      if check(a,i):
         a.append(i)
         z = rsearch(N) or z
         del a[-1]
   return z


a = []
b = []
rsearch(8)
print(a) #<-- empty list ??
print(b) #<-- list of 92 empty lists ?? ??
print(len(b)) #<-- returns 92

因此,对于用Python编写的8 Queens问题,我具有此实现,它可以工作,但是在格式化时遇到一些问题。 在我的len(a) == N检查是否打印解决方案列表,效果很好,我将解决方案列表附加到另一个列表b,在那一刻效果很好。 但是最终的print(a)会返回一个空列表,而print(b)会返回一个包含92个空列表的列表,它找到了每个解决方案,但它们都是空的。 有人知道我在做错什么,为什么他们是空的?

至于为什么a为空:您执行a.append(i)然后执行del a[-1] 有效地将元素附加到a ,然后再次将其删除。 因此,总数将保持为零。

至于为何b只包含空列表:您可以附加abb.append(a)因此b存储引用到列表中指出a 由于a是一个空列表,因此b包含对同一空列表a 92个(相似)引用。 如果你要添加的副本a ,如b.append([x for x in a])

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM