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