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 许可协议。转载请注明来自 小牛博客!
评论





