N queens問題を解きます。8 queens問題として知られていますが、ここでは、Nとし、プログラムはN=8とします。
(N*N)の桝目のチェスのクイーンが互いに相手を取らないようにN駒並べる局面を出力します。
pythonで書かれています。
nqueens.py
#!/usr/bin/python3
N=8 # 盤の桝目とQueenの数
a=[True]*N
b=[True]*(2*N-1)
c=[True]*(2*N-1)
x=[0]*N
solution=0
def found():
global solution
solution+=1
print(f"\n 解 {solution}\n")
for i in range(N):
for j in range(N):
print(" Q" if x[i]==j else " .",end='')
print("")
def _try(i):
global a,b,c
for j in range(N):
if a[j] and b[i+j] and c[i-j+N-1]:
x[i]=j
if i<N-1:
a[j],b[i+j],c[i-j+N-1]=False,False,False
_try(i+1)
a[j],b[i+j],c[i-j+N-1]=True,True,True
else:
found()
if __name__=='__main__':
_try(0)
exit(0)
出力
$ ./nqueens.py
解 1
Q . . . . . . .
. . . . Q . . .
. . . . . . . Q
. . . . . Q . .
. . Q . . . . .
. . . . . . Q .
. Q . . . . . .
. . . Q . . . .
解 2
(略)