python解决八皇后问题

题目:

将八位皇后放在一张8x8的棋盘上,使得每位皇后都无法吃掉别的皇后(即任意两个皇后都不在同一行/列/对角线上),问一共有多少种摆法。(如果两种摆法是可以通过旋转、对称变换变成同一种,那也算两种摆法)
棋盘问题也差不多((DFS之类的

利用了回溯的思想。。

N=8
col=[0]*(N+1)
count=0

def Queen(i,n,col):#i:准备安排第i位皇后
    global count
    if i>n:
        for i in range(1,N+1):
            print('(%d,%d)'%(i,col[i]),end=' ')
        print()
        count+=1
    else:
        for j in range(1,N+1):
            col[i]=j
            k=1#新安排的皇后的列坐标
            while k<i:
                if (col[k]-col[i])*(abs(col[k]-col[i])-abs(k-i))!=0:
                    #同列或同对角线
                    k+=1
                    if k==i:
                        Queen(i+1,n,col)
                else:
                    break

for l in range(1,N+1):
    col[1]=l
    Queen(2,N,col)
print(count)

你可能感兴趣的:(简单题)