我为 n-queens 问题尝试了这个 python 代码,但没有得到任何输出。有人能告诉我哪里出错了吗?
def initialize(n):
for key in ['queen','row','col','nwtose','swtone']:
board[key]={}
for i in range(n):
board['queen'][i]=-1
board['row'][i]=0
board['col'][i]=0
for i in range(-(n-1),n):
board['nwtose'][i]=0
for i in range(2*n-1):
board['swtone'][i]=0
def printboard():
for row in sorted(board['queen'].keys()):
print((row,board['queen'][row]))
def free(i,j):
return(board['row'][i]==0 and board['col'][j]==0 and board['nwtose'][j-i]==0 and board['swtone'][j+i]==0)
def addqueen(i,j):
board['queen'][i]=j
board['row'][i]=1
board['col'][j]=1
board['nwtose'][j-i]=1
board['swtone'][j+i]=1
def undoqueen(i,j):
board['queen'][i]=-1
board['row'][i]=0
board['col'][j]=0
board['nwtose'][j-i]=0
board['swtone'][j+i]=0
def placequeen(i):
n=len(board['queen'].keys())
for j in range(n):
if free(i,j):
addqueen(i,j)
if i==n-1:
return(True)
else:
extendsoln=placequeen(i+1)
if extendsoln:
return(True)
else:
undoqueen(i,j)
else:
return(False)
board={}
n=int(input("How many queens?"))
initialize(n)
if placequeen(0):
printboard()
printboard() 函数中的打印语句不起作用。谁能帮我推理为什么?