8 皇后呢

换成经典的 8×8 棋盘。运行同样的程序: #include <cstdlib> #include <iostream> #include <string> #include <vector>

开始练习 →

写冲突判断

补全 queen_ok:col 是前面每一行皇后所在的列,现在要在第 col.size() 行的第 c 列放一个,判断放不放得下。验两种情况:queen_ok({1}, 3) 和 queen_ok({1}, 2),两个结果拼起来输出。 (本

开始练习 →

写 N 皇后

补全 queens_dfs:一行放一个,放之前先用 queen_ok 查一遍,放不下就跳过。输出 4 皇后的解数。 (本题用 g++ -std=c++17 -O0 编译。)

开始练习 →

四种规模各有几个解

把 n = 4、5、6、7 各跑一遍,把四个解数拼起来输出。(这四个数不是递增的——留意 6 比 5 还少。) (本题用 g++ -std=c++17 -O0 编译。)

开始练习 →

剪枝在 N 皇后上省了多少

写两个版本跑 n = 5:剪枝版放之前就用 queen_ok 查;不剪枝版把 5 行全铺满,最后才逐对检查。输出四样:剪枝解数 / 不剪枝解数 / 剪枝结点数 / 不剪枝结点数。 (本题用 g++ -std=c++17 -O0 编译。)

开始练习 →

为什么不能只存 path 的地址

第 1 步:记下第 1 个:1 2 3 第 2 步:记第 2 个时,解1 也跟着变 第 3 步:三行永远一模一样 第 4 步:它们指着同一块内存 解1 解2 解3 1 2 3 3 2 1 3 2 2 1 3 2 1 3 2 1 3 用全局数

开始练习 →

撤销要撤哪些东西(C++)

回溯的撤销要覆盖【0】。

开始练习 →

存地址会得到什么

这个版本记解时存的是全局数组 g_path 的地址。运行它,看解的个数和第一个解的内容: #include <cstdlib> #include <iostream> #include <string>

开始练习 →

漏了 pop_back 剩几个解

这个版本撤销时只改回了 used,忘了把 path 弹出来。运行它: #include <cstdlib> #include <iostream> #include <string> #include &

开始练习 →

把路径记对

补全 perm_dfs:记解时存 path 的内容,撤销时 used 和 path 两样都撤。输出解的个数和第一个解。 (本题用 g++ -std=c++17 -O0 编译。)

开始练习 →