LeetCode刷题-51. N 皇后
题目链接:51. N 皇后
¶题解:
经典的N皇后问题!
¶题目简述:
n * n
的棋盘放n
个皇后,保证每行每列每条斜线都不能有大于一个皇后!
¶题解:
DFS来一遍即可!
使用col dg udg
分别存储列和两条对角线是否有皇后。使用res
存储答案,使用path
存储路径。
void dfs(int i, int n)
i
:代表第几层n
:代表皇后数或棋盘行列数
递归出口: i == n
即n
个皇后都已经找到,将当前方案加入答案res
使用dg[i + j]
和udg[i - j + n]
来标识两条对角线,原因就是你可以将它看成坐标系,一条对角线为y = x + b
,另一条为y = -x + b
,即可解的b = y - x, b = y + x
,y - x
可能越界,让他偏移n
,即可保证不越界。
递归开始: 只要列以及两条斜线以及没有被访问过,即可访问!使用path[i][j]
记录路径,表示i
行的j
列有一个皇后,更新标记,最后清空标记!
注意:数组的初始化,path
需要全部初始化为.
,col
要初始化n
个位置,dg udg
要初始化n * 2
个位置。
¶AC代码:
1 |
|
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 小牛博客!
评论