Python 算法教程(50):N 皇后问题详解

前言

N 皇后问题是回溯算法的经典应用,在面试中出现频率极高。

一、问题描述

在 N×N 的棋盘上放置 N 个皇后,使得它们互不攻击(不在同一行、列、对角线)。

二、回溯框架

def solveNQueens(n):
    def backtrack(row):
        if row == n:
            solutions.append(board[:])
            return
        for col in range(n):
            if isValid(row, col):
                placeQueen(row, col)
                backtrack(row + 1)
                removeQueen(row, col)
    
    solutions = []
    board = ["." * n for _ in range(n)]
    backtrack(0)
    return solutions

三、完整性检查

def isValid(self, row, col):
    # 检查列
    for i in range(row):
        if self.board[i][col] == "Q":
            return False
    # 检查左上对角线
    i, j = row - 1, col - 1
    while i >= 0 and j >= 0:
        if self.board[i][j] == "Q":
            return False
        i -= 1
        j -= 1
    # 检查右上对角线
    i, j = row - 1, col + 1
    while i >= 0 and j < self.n:
        if self.board[i][j] == "Q":
            return False
        i -= 1
        j += 1
    return True

四、复杂度分析

时间复杂度:O(N!),空间复杂度:O(N)

五、LeetCode 51

经典题目,建议至少刷 3 遍。

总结

N 皇后是回溯算法的标杆题目,必须掌握。

下一篇:数独求解

发表回复

后才能评论