我碰到这个问题,其中8个皇后应该放在一个棋盘,使得没有人能杀死每个other.This来到我就是试图解决这个问题:8皇后棋盘| PYTHON |内存错误
import itertools
def allAlive(position):
qPosition=[]
for i in range(8):
qPosition.append(position[2*i:(2*i)+2])
hDel=list(qPosition) #Horizontal
for i in range(8):
a=hDel[0]
del hDel[0]
l=len(hDel)
for j in range(l):
if a[:1]==hDel[j][:1]:
return False
vDel=list(qPosition) #Vertical
for i in range(8):
a=vDel[0]
l=len(vDel)
for j in range(l):
if a[1:2]==vDel[j][1:2]:
return False
cDel=list(qPosition) #Cross
for i in range(8):
a=cDel[0]
l=len(cDel)
for j in range(l):
if abs(ord(a[:1])-ord(cDel[j][:1]))==1 and abs(int(a[1:2])-int(cDel[j][1:2]))==1:
return False
return True
chessPositions=['A1','A2','A3','A4','A5','A6','A7','A8','B1','B2','B3','B4','B5','B6','B7','B8','C1','C2','C3','C4','C5','C6','C7','C8','D1','D2','D3','D4','D5','D6','D7','D8','E1','E2','E3','E4','E5','E6','E7','E8','F1','F2','F3','F4','F5','F6','F7','F8','G1','G2','G3','G4','G5','G6','G7','G8','H1','H2','H3','H4','H5','H6','H7','H8']
qPositions=[''.join(p) for p in itertools.combinations(chessPositions,8)]
for i in qPositions:
if allAlive(i)==True:
print(i)
回溯(最近最后一次通话):
qPositions = [ '' 加入(p)对于p在itertools.combinations(chessPositions,8)]
的MemoryError
我还是个新手。我该如何克服这个错误?还是有更好的方法来解决这个问题?
它可以通过尝试和_backtracking_解决,直到找到一个有效的解决方案(暗示递归) –
每个字符串像“”A1“'是2个字节的大小。 2 * 4426165368> 8Gb。除非一个人拥有更多的10GB内存,或者不以某种特殊的方式使用某种交换方式,否则他无法计算该阵列。既然他说他是Python的新手,我认为他不能做任何上述的描述。当然,这可以通过做一些生病的编程的东西来完成,但我怀疑他的课程是关于这个的;) – campovski
10GB或RAM以及大量的CPU功率。 10GB的ram在企业服务器上很常见,但填满阵列的时间太多了。 –