回溯法求八皇后问题
#判断是否冲突
def is_conflict(a,n):
flag=0
for i in range(0,n):
if a[i]==a[n] or abs(a[i]-a[n])==n-i:
flag=1
break
return flag
def print_board(a,n):
for i in range(n):
for j in range(n)[0:a[i]]:
print "X",
print "Q",
for j in range(n)[(a[i]+1):]:
print "X",
print '\n'
print "-----------------"
#输出结果
def queen(n):
count=0
a=[0]*n
i=0
while True:
if a[i]<n: # 如果皇后的位置尚未超出棋盘范围,需要检查第i行的皇后是否与前i-1行的皇后冲突
if is_conflict(a,i):
a[i]+=1 #如果冲突,尝试下一列
continue
if i>=n-1: #如果已经到最后一行,则可输出一个结果
count+=1
#print_board(a,n)
a[n-1]+=1 #并尝试前一行的后一个情况
continue
i+=1
continue
else: #皇后的位置已经超出棋盘范围 ,那么退回上一行,皇后退回前一行
a[i]=0
i-=1
if i<0: #没有行可退,结束
return count
a[i]+=1
continue