mirror of
https://github.com/krahets/hello-algo.git
synced 2026-07-21 19:06:11 +00:00
build
This commit is contained in:
@@ -20,7 +20,7 @@ comments: true
|
||||
|
||||
<p align="center"> 图:n 皇后问题的约束条件 </p>
|
||||
|
||||
### 逐行放置策略
|
||||
### 1. 逐行放置策略
|
||||
|
||||
皇后的数量和棋盘的行数都为 $n$ ,因此我们容易得到一个推论:**棋盘每行都允许且只允许放置一个皇后**。
|
||||
|
||||
@@ -34,7 +34,7 @@ comments: true
|
||||
|
||||
本质上看,**逐行放置策略起到了剪枝的作用**,它避免了同一行出现多个皇后的所有搜索分支。
|
||||
|
||||
### 列与对角线剪枝
|
||||
### 2. 列与对角线剪枝
|
||||
|
||||
为了满足列约束,我们可以利用一个长度为 $n$ 的布尔型数组 `cols` 记录每一列是否有皇后。在每次决定放置前,我们通过 `cols` 将已有皇后的列进行剪枝,并在回溯中动态更新 `cols` 的状态。
|
||||
|
||||
@@ -48,7 +48,7 @@ comments: true
|
||||
|
||||
<p align="center"> 图:处理列约束和对角线约束 </p>
|
||||
|
||||
### 代码实现
|
||||
### 3. 代码实现
|
||||
|
||||
请注意,$n$ 维方阵中 $row - col$ 的范围是 $[-n + 1, n - 1]$ ,$row + col$ 的范围是 $[0, 2n - 2]$ ,所以主对角线和次对角线的数量都为 $2n - 1$ ,即数组 `diag1` 和 `diag2` 的长度都为 $2n - 1$ 。
|
||||
|
||||
|
||||
Reference in New Issue
Block a user