例题2.4 八皇后问题
这个问题是19实际的一位国际象棋棋手马克思贝瑟尔提出的,讲的是在8x8格的国际象棋上摆放8个皇后,使其不会互相攻击,有多少种摆法?怎么摆
def solve(result_list, chess_list, row):
length = len(chess_list)
if row == length:
result_list.append(chess_list.copy())
for col in range(length):
if check_valid(chess_list, row, col):
chess_list[row] = col
solve(result_list, chess_list, row + 1)
chess_list[row] = 'Q'
def check_valid(chess_list, row, col):
if col in chess_list:
return False
for current_row, current_col in enumerate(chess_list):
if current_col != 'Q' and (current_row - row == current_col - col or current_row + current_col == row + col):
return False
return True
def solve_queens(queen_number):
chess_list = ['Q' for _ in range(queen_number)]
result_list = []
solve(result_list, chess_list, 0)
return result_list
if __name__ == '__main__':
result = solve_queens(8)
print(len(result))