我尝试了此python代码来解决n皇后问题,但没有得到任何输出。 有人可以告诉我我哪里出问题了吗?
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()函数中的打印语句不起作用。有人可以帮我推理原因吗?
答案 0 :(得分:0)
复制并运行您的代码,并收到以下错误:
IndentationError:unindent与任何外部缩进级别都不匹配
这是关于您的场所函数中的最后一个“其他陈述”
将此内容复制到其他内容,然后重试:
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: # << this needed a space
return(False)
您正在使用什么编辑器/ IDE?我建议使用pycharm,在我不得不运行代码之前,它给了我这个错误。
让我知道这是否解决了您的问题!
答案 1 :(得分:0)
不打印任何内容的原因是因为您的if语句执行为False,而您希望它为True。
使用此代码检查自己(添加了else块以在语句为False时捕获输出):
board={}
n=int(input("How many queens?"))
initialize(n)
if placequeen(0):
print("Output == True")
printboard()
else: #<< added for debug purposes
print("Output == False")
printboard()
原因和解决方案
将条件执行为False的原因可能是因为在placequeen()函数中,您在for循环内使用了“ Return”语句。
您需要调试此function()并检查为什么它(几乎)始终返回注释(= False)。
问题的根本原因在于placequeen()函数。希望这将使您走上正确的道路!