算法用于解决N皇后问题
发布时间
阅读量:
阅读量
AcWing题库对应题目链接:n-皇后问题
算法思路
基于先前所撰写的数字排列中深度优先搜索(DFS)的思路,将path[]视为每一行放置皇后的位置,每次在一行中确定一个符合要求的皇后位置后,便进入下一层递归:dfs(u + 1),这即代表找到了一个皇后的具体位置。
判断该位置是否符合规则的依据是:在当前递归所在的行数中,逐个检查每一列的棋格,确保当前格子所在的列、对角线以及反对角线均未放置皇后。
使用col[N]用于标识某一列是否存在皇后
dg[N]用于表示当前格子所在对角线上是否存在皇后
udg[N]用于表示当前格子所在反对角线上是否存在皇后
因此判断条件可表述为:!col[i] && !dg[u + i] && !udg[u - i + n]
由于递归是按照竖列进行的,因此每一横行仅放置一个皇后,无需再验证该行是否有冲突。
对于对角线与反对角线的理解存在两种方式:
1. 较为直观的理解是:随着向右下方移动,行号与列号都会增加;而向左下方移动时,列号减少而行号增加。此处加上n是为了避免出现负数索引的情况。
2. 另一种理解方式则借助直角坐标系中的截距概念进行分析:
`row = -col + b =>
全部评论 (0)
还没有任何评论哟~
