八皇后问题简单记录
在8*8格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法?
使用回溯法
先确定好第一个皇后的位置,然后排除不可放置的位置,放置第二个皇后
继续放置皇后,若无位置可放,将皇后位置设为0,则返回上一步,若有则继续往下找寻
以下为Python代码:
def find_Queen(row):
if row>7:
global count
count+=1
print_queen()
return
for column in range(8):
if check(row,column):
Queen[row][column]=1
find_Queen(row+1)
Queen[row][column]=0
检查的代码
def check(row,column):
# 检查行列
for k in range(8):
if Queen[k][column]==1:
return False
# 检查主对角线
for i,j in zip(range(row-1,-1,-1),range(column-1,-1,-1)):
if Queen[i][j]==1:
return False
# 检查副对角线
for i,j in zip(range(row-1,-1,-1),range(column+1,8)):
if Queen[i][j]==1:
return False
return True
具体的打印代码
def print_queen():
print(Queen)
for i in range(8):
for j in range(8):
if Queen[i][j]==1:
print('☆ '*j+'★ '+'☆ '*(7-j))
print("\n\n")

浙公网安备 33010602011771号