今天想到了8皇后问题,所以特地来实现了一下,所谓的8皇后,就是在8*8的网格里面放皇后,然后任意两个皇后不能同行,同列或者同斜线。
分析
- 用一个一维数组表示8皇后,其中索引为行号,值为列号;
- 实现一个conflict函数,判断一维数组里面的值是同列,或者同对角线
- 剩下的就是按照行递归,每一次递归的时候找合适的列填值就行了。
- 终止条件就是填到了n-1行打印输出就行了
代码
def conflict(q,x,y):
for i in range(x):
if(q[i]==y or abs(i-x)==abs(q[i]-y)):
return True
return False
def n_queen(n,q,row):
for i in range(n):
if(not conflict(q,row,i)):
q[row]=i
if(row==n-1):
print(q)
else:
n_queen(n,q,row+1)
if __name__ == "__main__":
n=8
q=[None for i in range(n)]
n_queen(n,q,0)