什么时候记下一个解(C++)

回溯里记录一个解的时机是【0】。

开始练习 →

标准模板跑出来是什么

用标准回溯模板生成 1、2、3 的全排列。运行下面这段程序: #include <cstdlib> #include <iostream> #include <string> #include <v

开始练习 →

把三步写全

补全 perm_dfs 的循环体:选择(标记 + 入路径)、探索(递归)、撤销(取消标记 + 出路径)。输出解的个数。 (本题用 g++ -std=c++17 -O0 编译。)

开始练习 →

修一个漏了撤销的版本

下面这个版本只撤销了 used,忘了把 path 弹出来,跑出来只剩 1 个解。把它修好,输出修好之后解的个数。 (本题用 g++ -std=c++17 -O0 编译。)

开始练习 →

撤销与不撤销一起跑

把撤销写全的 perm 和漏了 pop_back 的 perm_nopop 都跑一遍 1、2、3,把两个解的个数拼起来输出(写全的在前)。 (本题用 g++ -std=c++17 -O0 编译。)

开始练习 →

全局数组回溯返回前要做什么

第 1 步:全局数组,一开始全是 0 第 2 步:进入:标记,写进 path[0] 第 3 步:再进一层:写进 path[1] 第 4 步:返回:标记改回 0 第 5 步:path[1] 不用擦,下次会覆盖 0 1 2 3 used pat

开始练习 →

全局 path 怎么弹出一个

全局数组 path[] 配一个长度变量 len,「弹出」最后一个元素只要【0】。

开始练习 →

按引用传 path 的代价

递归时把 vector<int>& path 按引用传下去,和按值传相比【0】。

开始练习 →

全局数组排出几种

运行下面这段程序: #include <cstdlib> #include <iostream> #include <string> #include <vector> using names

开始练习 →

next_permutation 走一遍

标准库的 next_permutation 把序列改成字典序的下一个排列,已经是最后一个时返回 false。运行下面这段程序: #include <cstdlib> #include <iostream> #incl

开始练习 →