#2
fall_bernana2020-10-14 09:52
回复 楼主 lyl930130
|
但是在调用printall()函数的时候,类中的变量是空,在初始化时候又能够输出结果。不理解为什么。
程序代码:
class Nqueen(object):
n = -1
queenlists = [] #空列表 存储总的序列
queenlist = [] #空列表 存储单个满足条件的序列
def __init__(self, N):#构造函数,初始化执行
self.n = N
self.solution(N)
def solution(self, N):
if N == 0:
print(self.queenlist)
self.queenlists.append(self.queenlist)
return
for tmp in range(0, self.n):
if self.check(N, tmp)== True:
self.queenlist.append(tmp)
self.solution(N-1)
self.queenlist.pop(-1)# 出队列,0是第一个,-1是最后一个,默认-1,类似数组下标
def check(self, N, tail):
if N == 0:
print('N:0 %s' %(self.queenlist))
return True
for tmp in self.queenlist:#行重复
if tmp == tail:
return False
for tmp in range(0, len(self.queenlist)):
if abs(tmp-len(self.queenlist)) == abs(self.queenlist[tmp]-tail):
return False
return True
def printall(self):
for tmp in self.queenlists:
print(tmp)
print(self.queenlists)
Nqueen(8).printall()
#queens = Nqueen(4)
#queens.solution(queens.n)
#queens.printall()
n = -1
queenlists = [] #空列表 存储总的序列
queenlist = [] #空列表 存储单个满足条件的序列
def __init__(self, N):#构造函数,初始化执行
self.n = N
self.solution(N)
def solution(self, N):
if N == 0:
print(self.queenlist)
self.queenlists.append(self.queenlist)
return
for tmp in range(0, self.n):
if self.check(N, tmp)== True:
self.queenlist.append(tmp)
self.solution(N-1)
self.queenlist.pop(-1)# 出队列,0是第一个,-1是最后一个,默认-1,类似数组下标
def check(self, N, tail):
if N == 0:
print('N:0 %s' %(self.queenlist))
return True
for tmp in self.queenlist:#行重复
if tmp == tail:
return False
for tmp in range(0, len(self.queenlist)):
if abs(tmp-len(self.queenlist)) == abs(self.queenlist[tmp]-tail):
return False
return True
def printall(self):
for tmp in self.queenlists:
print(tmp)
print(self.queenlists)
Nqueen(8).printall()
#queens = Nqueen(4)
#queens.solution(queens.n)
#queens.printall()