⚠️ 存引用和存副本,一起跑

⚠️ 存引用和存副本,一起跑

写两个版本:一个 res.append(path),一个 res.append(list(path))。 把两者第一个解的长度拼起来输出(存引用的在前)。

阅读更多 →
把路径记对

把路径记对

补全 perm:记解时存副本,撤销时 used 和 path 两样都撤。 输出解的个数和第一个解。

阅读更多 →
漏了 path.pop() 会剩几个解

漏了 path.pop() 会剩几个解

这个版本撤销时只改回了 used,忘了把 path 弹出来。运行它: def perm_nopop(a): res = [] path = [] used = [False]

阅读更多 →
⚠️ 存引用会得到什么

⚠️ 存引用会得到什么

这个版本记解时写的是 res.append(path)(没有转成副本)。运行它,看解的个数和第一个解的长度: def perm_ref(a): res = [] path = []

阅读更多 →
撤销要撤哪些东西

撤销要撤哪些东西

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

阅读更多 →
⚠️ 为什么要存 list(path) 而不是 path

⚠️ 为什么要存 list(path) 而不是 path

记录一个解时要写 res.append(list(path)),因为【0】。

阅读更多 →
⚠️ 剪枝在 N 皇后上省了多少

⚠️ 剪枝在 N 皇后上省了多少

写两个版本跑 n = 5: 剪枝版:放之前就用 ok 查 不剪枝版:把 5 行全铺满,最后才逐对检查 输出四样:剪枝解数 / 不剪枝解数 / 剪枝结点数 / 不剪枝结点数。

阅读更多 →
四种规模各有几个解

四种规模各有几个解

把 n = 4、5、6、7 各跑一遍,把四个解数拼起来输出。 (这四个数不是递增的——留意 6 比 5 还少。)

阅读更多 →
写 N 皇后

写 N 皇后

补全 queens:一行放一个,放之前先用 ok 查一遍,放不下就跳过。输出 4 皇后的解数。

阅读更多 →
写冲突判断

写冲突判断

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

阅读更多 →