显性单数解法 - 数独中最基础的确定技巧

·约 2 分钟阅读

显性单数是指某个格子的候选数被缩减为唯一一个的状态。这是学习数独时最先应该掌握的技巧,Easy 级别的谜题仅靠它就能完成。本文讲解发现显性单数的诀窍和高效应用方法。

什么是显性单数

显性单数(Naked Single)是指某个格子中可填入的候选数字仅剩 1 个的状态。该格所在行、列、宫格中已有的数字都会从候选中被排除,因此逐层排除后只剩下 1 个数字时,这个数字就可以确定。看一个具体例子。假设某格所在行已有 1、2、3、4、5,所在列已有 7、8,所在宫格已有 9。那么 1 到 9 中不能填入的共有 8 个,只剩下 6,因此该格确定为 6。这里的关键在于,必须从三个方向收集排除依据。如果只看行就判断「还有 2 个候选」而继续往下走,就会漏掉列或宫格提供的最后一次排除,错过眼前的确定。

高效发现方法

要可靠地找出显性单数,方法是用笔记功能写出候选数。写出来之后,只剩 1 个候选的格子一眼可见,但维护全部 81 格的笔记成本很高,而且每确定 1 格都要改写。因此实战中更有效的做法是,不写整个盘面,只在感到卡住的局部写出候选数。值得瞄准的是行、列、宫格都填得较满的格子,也就是约束集中的交叉点。周围填得越满,可排除的数字越多,候选就越容易降到 1 个。反之,盯着周围空旷的格子看再久也无法缩小范围,只是白费时间。把候选笔记当作「确认哪里有希望缩小」的工具,而不是「全部写出来」的工具,就能兼顾速度与可靠。

仅靠显性单数就能解出的谜题特征

Easy 级别的谜题被设计为仅靠显性单数的连锁就能完成。确定 1 格后,该数字成为新的排除条件,让共享行、列、宫格的另一格候选减少到 1 个。这种波及扩散到整个盘面,因此不需要动用其他技巧也能填满。这里容易产生的误解,是用提示数的多少来衡量难度。提示多的盘面未必更容易,提示少的盘面也未必更难。决定难度的是:为了解完必须使用哪些技巧。只靠显性单数就够的盘面属于容易一档,无法回避隐性唯一数或显性数对的盘面则在其上。把提示数和难度当作两件不同的事来看待,无论对出题方还是解题方都是正确的视角。

显性单数的局限性

在 Medium 以上的难度中,一定会出现仅靠显性单数无法推进的场面。每个格子都留有 2 个以上候选,再怎么排除也降不到 1 个。此时并不是盘面出错,而是「看格子」这个方向能取得的信息已经用尽。感到撞墙时,与其用同样的找法把盘面绕上好几圈,不如切换视角更快。隐性唯一数、显性数对这些下一步技巧,都是从与显性单数不同的角度削减候选的工具,而它们带来的排除又会催生新的显性单数。准确了解界限,也有助于避免把真正的卡顿误当成自己的疏漏而白耗时间。

显性唯一数与隐性唯一数的区别

显性唯一数与隐性唯一数都是确定单格的基本技巧,但观察的方向恰好相反。显性唯一数是格子视角:用行、列、宫的约束削减某格的候选,剩下一个时即确定。隐性唯一数是数字视角:当某单元内能放该数字的位置只有一处时即确定。最大的区别在于,显性唯一数的格子只有一个候选,而隐性唯一数的格子是在仍持有其他候选的情况下被确定的。一旦能有意识地在两者间切换,卡壳便会大为减少。

从盘面何处入手搜索

对要找的位置有了判断之后,接下来要定的是扫描顺序。推荐的做法是,把 9 个宫格按从左上到右下的固定顺序看过去,在每个宫格内逐一确认空格。固定顺序后,就不必记住自己看到哪里了,既减少重复看同一处的浪费,也减少整块跳过的遗漏。另一个有效的习惯是确定之后立刻进行局部扫描。填入 1 个数字后,先不要回到整盘巡视,而是只复查与该格共享行、列、宫格的空格。候选发生变化的范围仅限于此,所以若产生了新的显性单数,首先就在那里。用整盘巡视广泛捕捉候选位置,每次确定后用局部扫描回收连锁。这种两段式做法,正是与漫无目的地盯着盘面的差别所在。

确定所带来的连锁

显性单数的价值,不在于填上 1 格本身,而在于它引发的连锁。在某格确定数字后,该数字会同时从共享行、列、宫格的候选中消失。受影响的格子最多可达 20 个,其中任何一格的候选降到 1 个,下一个显性单数就诞生了。连锁并非一条直线,而是会分叉,因此确定 1 格之后连续确定两三格也不罕见。反之,若疏于确定后的复查,本该出现的显性单数就会被留在盘面上,之后便让人觉得「无处可走」。这种卡顿感的真相,多半不是盘面难,而是漏掉了连锁。要把「填完就复查周围」培养成一套连贯动作。

实战中的定位

显性唯一数是任何题目最先使用、最为基础的技巧。无论问题多难,开局都先用显性唯一数与隐性唯一数把能填的清掉,再由此迈向高级技巧,这是定式。若疏忽基础、只顾寻找高难技巧,便会漏掉眼前简单的确定而绕远路。反之,基础越是又快又准,便越有时间与余力去专注难点。看似朴素,显性唯一数的精度,正支撑着整盘解答的根基。