私は次のコードを試しました。コードの複雑さを減らすために何か修正が加えられたら、私はboardというネストされた辞書を使用しました。Pythonを使ってN-queensを解く(コードの代替案):
def initialize(board,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(board):
for row in sorted(board['queen'].keys()):
print((row,board['queen'][row]))
def free(i,j,board):
return(board['queen'][i] == 0 and 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):
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):
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,board):
n = len(board['queen'].keys())
for j in range(n):
if free(i,j,board):
addqueen(i,j,board)
if i == n-1:
return(True)
else :
extendsoln = placequeen(i+1,board)
if extendsoln:
return(True)
else:
undoqueen(i,j,board)
else:
return(False)
board = {}
n = int(input("How many Queens? "))
initialize(board,n)
if placequeen(0,board):
printboard(board)
私はこのコードを試してみましたが、入力を4にしても出力は得られません。 私は間違っていますか?
おかげ
ようこそスタックオーバーフロー。デバッガを使用してコードを1行ずつ表示する方法を学ぶ必要があると思われます。これにより、発生している問題の性質と場所を簡単に特定できるようになります。デバッガの使用は、あらゆる目的のために、どのプログラマにとっても必要な知識です。詳細は、[小さなプログラムをデバッグする方法](http://ericlippert.com/2014/03/05/how-to-debug-small-programs/)を参照してください。 –