This commit is contained in:
krahets
2023-10-23 04:56:13 +08:00
parent c2ee796047
commit 365620ac22
4 changed files with 22 additions and 5 deletions
@@ -950,8 +950,8 @@ comments: true
请注意,虽然 `selected` 和 `duplicated` 都用作剪枝,但两者的目标是不同的。
- **重复选择剪枝**:整个搜索过程中只有一个 `selected` 。它记录的是当前状态中包含哪些元素,作用是避免某个元素在 `state` 中重复出现。
- **相等元素剪枝**:每轮选择(即每个开启的 `backtrack` 函数)都包含一个 `duplicated` 。它记录的是在遍历中哪些元素已被选择过,作用是保证相等元素只被选择一次。
- **重复选择剪枝**:整个搜索过程中只有一个 `selected` 。它记录的是当前状态中包含哪些元素,作用是防止 `choices` 中的任一元素在 `state` 中重复出现。
- **相等元素剪枝**:每轮选择(即每个调用的 `backtrack` 函数)都包含一个 `duplicated` 。它记录的是在本轮遍历(即 `for` 循环)中哪些元素已被选择过,作用是保证相等元素只被选择一次。
图 13-9 展示了两个剪枝条件的生效范围。注意,树中的每个节点代表一个选择,从根节点到叶节点的路径上的各个节点构成一个排列。