N皇后问题
问题简述
N 皇后问题是指在 n * n 的棋盘上要摆 n 个皇后,
要求:任何两个皇后不同行,不同列也不在同一条斜线上,
求给一个整数 n ,返回 n 皇后的摆法数。
思路:DFS
定义
book[i]=j
表示第i
行、第j
列放了一个“皇后”;DFS 每一行,检查该行的每个点
(i,j)
是否与已经放置的点(i_,j_)
是否共行、共列、共斜线;检查是否共斜线:
abs(斜率) != 1
【DFS 找方法数】初始化全局变量
ret=0
记录可行的方法数,能顺利走到递归基就+1
;
优化:最优时间复杂度就是 $O(n^n)$,但是可以利用位运算优化常数项(核心利用二进制状态压缩优化 valid
的判断);
因为 Python 中的位运算跟其他语言略有区别,下面的代码用 C++ 完成;
Last updated