四种求解模式各自优化什么,以及何时选择哪一种。
最后更新:2026 年 8 月 12 日
本站的哥特王朝重制版开锁求解器共有四种求解模式:最少切换、最少切换(快速)、最少步数、最少步数(快速)。前两种尽量少切换锁盘,后两种保证总步数最少。目标在所有锁上都一样——无论 4 盘还是 7 盘:把每根销钉都转到中心位置 0。不变的还有一条底线:每种模式在采纳一步之前都会做合法性检查,任何会把锁盘推出 -3 到 +3 范围的移动都会被直接丢弃。锁盘停在 -3 或 +3 的墙边还继续往同方向转,正是损镐的原因——所以从算法构造上看,没有任何一种模式会给出撞墙的一步,照做锁镐就不会断。
四种模式只在对序列的选择方式上不同,安全性完全一致:无论哪把锁,四者输出的每一步都保证不越界。下面的对比表列出了每种模式优化什么、算得有多快、适合什么场景;后面的章节则说明每个算法是怎么算的,以及快速版在哪里做了取舍。
| 模式 | 优化目标 | 速度 | 适合场景 |
|---|---|---|---|
| 最少切换 | 切换次数最少,再求步数最少 | 完整搜索——四种中最慢 | 游戏内手动跟步骤 |
| 最少切换(快速) | 贪心局部选择,切换尽量少 | 即时出结果;卡住时回退到最短步数 BFS | 大锁上快速出解法 |
| 最少步数 | 总步数最少(有保证) | BFS——任何锁都是毫秒级 | 输入最少、步数精确 |
| 最少步数(快速) | 与最少步数相同 | 同一个 BFS——本来就很快 | 与最少步数相同 |
最少切换(fs)会穷举搜索所有可达的锁盘状态,并按两个数字的先后顺序给候选路径排序:先看锁盘切换次数,再看总步数。只要连续两步用的是不同的锁盘(比如先转 1 号盘、下一步转 3 号盘),就算一次切换。由于切换次数在排序中占主导,算出的序列会长久停留在同一块锁盘上——这正是它适合在游戏里一步步跟的原因:手指或摇杆基本不用挪位置。代价是计算量:只要找到一条切换更少的路径,搜索就会重新评估已访问过的状态,所以在 6 到 7 盘的锁上,它是四种模式里最费时的。
最少切换(快速)(fsf)是贪心捷径:每一步先尝试你正握着的锁盘,再用一条简单启发式给所有合法移动打分——切换记 1000 分,再加上所有锁盘到中心的距离之和——只选当前局部最好的走法,不做任何前瞻。因此它在任何锁上都几乎瞬间出结果。代价是精确性:局部划算的走法几步之后可能并不好,fsf 的切换次数或总步数可能多于 fs。而且一旦贪心过程卡住、或达到 5000 步的安全上限,worker 会自动回退到最短步数 BFS,返回它的结果。想要快速答案可以选它;想要切换次数有保证,请用 fs。
最少步数(sm)使用广度优先搜索:先展开一步能到达的所有状态,再展开两步能到达的,以此类推,每个状态只访问一次。因为状态严格按层展开,第一个被找到的解必然是用步数最少的那一个——这是数学上的保证,不是近似。切换次数完全不参与排序,这正是最短序列会频繁换盘的原因:每一层都会尝试所有锁盘,在 6 盘锁上,最短路径经常要切好几次盘。需要三下的锁盘,有时通过转它的联动邻居两下就能更快到位——这类捷径 BFS 会自动找出来。你用操作的舒适度换来了输入次数的最少。
最少步数(快速)(smf)执行的完全是同一个广度优先搜索——在 worker 里,两个按钮调用的是同一个函数。它确实没有什么可加速的:每块锁盘的位置有 7 种取值,即使 7 盘锁也最多 823,543 个状态,每个状态最多展开一次,毫秒级就能出结果。「快速」标签只是为了四种模式在界面上保持对称,并不代表算法不同。想要总步数绝对最少、也不介意多换几次盘,就用 sm 或 smf。
在游戏里一步步手跟:选最少切换。切换少意味着手指或摇杆在锁盘之间挪动的次数少,而且完整搜索保证结果是精确的,不是猜的。如果 6 到 7 盘的大锁上搜索偏慢,最少切换(快速)是实用的替代——只是要记住,贪心的结果可能与 fs 不同。两个模式的边缘安全性完全相同,选择只关乎舒适度与步数之间的取舍。
想要输入次数最少,或者要解特别大的锁:最少步数(快速版与之完全相同)保证总步数最少,也是四种模式里最快的。大师级断镐移除若干联动后,锁盘各自独立,搜索图一下子开阔了:所有模式依然保持边缘安全,但 fs 的完整搜索要比较的路径最多,BFS 则依然瞬间完成。经验法则:手跟为主选最少切换(或快速版);追求最少输入或最快出结果选最少步数。从 4 盘到 7 盘的所有锁上,四种模式的每一步都把销钉牢牢限制在 ±3 之内——只要严格照序列执行,锁镐就不会断。