八皇后问题的python代码

来源:互联网 发布:中国经济现状数据 编辑:程序博客网 时间:2024/05/16 06:38

回溯法求八皇后问题

#判断是否冲突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 flagdef 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
0 0