八皇后问题实现代码分享


八皇后问题是一个经典的回溯算法问题,其中需要在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"表示,空位置用"."表示。