簡體   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