撤销与不撤销一起跑
把撤销写全的 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
补全全局数组版排列
补全 dfs_g 的循环体:进入时标记并写进 path_g,返回时成对撤销。输出 1 到 4 的全排列个数。 (本题用 g++ -std=c++17 -O0 编译。)
全局数组版组合
补全 dfs_c:用全局数组从 1 到 5 里取 3 个,每层只从上一个选过的后面挑。输出组合个数。 (本题用 g++ -std=c++17 -O0 编译。)
next_permutation 数排列
补全:把 a 排好序后,用 next_permutation 数出 1、2、3、4 一共有几种排列,并输出第 10 个排列(从 1 数),格式如 24/1234。 (本题用 g++ -std=c++17 -O0 编译。)
按值传就不用撤销
补全 val_dfs:path 按值传,每层拿到的是自己的副本,所以递归回来不用 pop。输出 1、2、3 的全排列个数。 (本题用 g++ -std=c++17 -O0 编译。)