def is_safe(queen_position, queens):
"""
检查在当前位置放置皇后是否安全。
:param queen_position: 准备放置皇后的位置 (row, col)
:param queens: 已放置皇后的位置列表
:return: 安全返回 True,否则返回 False
"""
row, col = queen_position
for q_row, q_col in queens:
if q_col == col or q_row + q_col == row + col or q_row - q_col == row - col:
return False
return True
def solve_n_queens(n, row=0, queens=None, solutions=None):
"""
解决 N 皇后问题的递归函数。
:param n: 棋盘大小
:param row: 当前处理的行
:param queens: 当前已放置皇后的位置列表
:param solutions: 所有可能的解决方案
:return: 所有可能的解决方案列表
"""
if queens is None:
queens = []
if solutions is None:
solutions = []
if row == n:
solutions.append(queens.copy())
return solutions
for col in range(n):
if is_safe((row, col), queens):
queens.append((row, col))
solve_n_queens(n, row + 1, queens, solutions)
queens.pop()
return solutions
n = 8
solutions = solve_n_queens(n)
len(solutions), solutions[:2]