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 皇后是回溯算法的标杆题目,必须掌握。
下一篇:数独求解
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。







