[英]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
只包含空列表:您可以附加a
以b
( b.append(a)
因此b
存儲引用到列表中指出a
。 由於a
是一個空列表,因此b
包含對同一空列表a
92個(相似)引用。 如果你要添加的副本a
,如b.append([x for x in a])
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.