八皇后问题是以国际象棋为背景的问题:有八个皇后(可以当成八个棋子),如何在 8*8 的棋盘
中放置八个皇后,使得任意两个皇后都不在同一条横线、纵线或者斜线上。
思路
回溯算法的典型体现
代码
def check(board, row, col):
i = 0
#判断条件
for i in range(row):
if abs(board[i]-col) == 0 or abs(board[i]-col) == abs(i-row):
return False
return True
def eightqueen(board, row):
border = len(board)
#终止条件
if row >= border:
for i,col in enumerate(board):
print('□ ' * col + '■ ' + '□ ' * (len(board) - 1 - col))
print("")
#标记条件
col = 0
while col < border:
for col in range(border):
if check(board, row, col):
board[row] = col
eightqueen(board, row+1)
col += 1
board = [0 for i in range(4)]
#棋盘
eightqueen(board, 0)