class Solution: def solveNQueens(self, n: int) -> List[List[str]]: # 判断当前位置是否可以放置皇后 def is_valid(board, row, col): # 检查列是否有皇后 for i in range(n): if board[i][col] == 'Q': return False # 检查左上方是否有皇后 i, j = row - 1, col - 1 while i >= 0 and j >= 0: if board[i][j] == 'Q': return False i, j = i - 1, j - 1 # 检查右上方是否有皇后 i, j = row - 1, col + 1 while i >= 0 and j < n: if board[i][j] == 'Q': return False i, j = i - 1, j + 1 return True

    # 将棋盘转换成输出格式
    def board_to_list(board):
        res = []
        for row in board:
            res.append(''.join(row))
        return res
    
    # 深度优先搜索
    def dfs(board, row, res):
        # 搜索到最后一行,将当前解法加入结果列表
        if row == n:
            res.append(board_to_list(board))
            return
        for col in range(n):
            if is_valid(board, row, col):
                board[row][col] = 'Q'
                dfs(board, row + 1, res)
                board[row][col] = '.'
    
    # 初始化棋盘,全部置为'.'
    board = [['.' for _ in range(n)] for _ in range(n)]
    res = []
    dfs(board, 0, res)
    return res
N皇后问题求解算法:Python实现与优化

原文地址: http://www.cveoy.top/t/topic/m8TK 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录