八皇后问题是一个经典的回溯算法问题,其中需要在8x8的棋盘上放置八个皇后,使得她们互不攻击。这里提供一个使用Python实现的简单版本:
def is_safe(board, row, col):
# 检查列上是否有皇后互相冲突
for i in range(row):
if board[i] == col:
return False
# 检查左上方对角线是否有皇后互相冲突
for i, j in zip(range(row-1, -1, -1), range(col-1, -1, -1)):
if board[i] == j:
return False
# 检查右上方对角线是否有皇后互相冲突
for i, j in zip(range(row-1, -1, -1), range(col+1, 8)):
if board[i] == j:
return False
return True
def solve_n_queens(n=8):
def place_queens(row=0):
# 所有皇后都放置完毕
if row == n:
result.append(board[:])
return
for col in range(n):
if is_safe(board, row, col):
board[row] = col
place_queens(row + 1)
board[row] = -1 # 回溯,撤销当前皇后的位置
board = [-1] * n
result = []
place_queens()
return result
# 调用函数并打印结果
solutions = solve_n_queens()
for solution in solutions:
for row in solution:
print(" ".join("Q" if col == row else "." for col in range(8)))
print()
这段代码首先定义了一个`is_safe`函数来检查在棋盘的某个位置放置皇后是否安全(即不与已放置的皇后冲突)。然后,`solve_n_queens`函数使用回溯算法来尝试所有可能的皇后放置方式,并将所有有效的解决方案存储在`result`列表中。最后,代码遍历所有解决方案,并打印出每个解决方案的棋盘布局。
请注意,由于八皇后问题有多个解决方案,因此上述代码会打印出所有可能的解决方案。每个解决方案中,皇后用"Q"表示,空位置用"."表示。