> For the complete documentation index, see [llms.txt](https://sudoku.kazusa.tech/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://sudoku.kazusa.tech/partial-marking-technique/05-strategying-phase-2/02-looking-of-direct-and-partial-marking-techniques-in-full-marking-grids.md).

# 直观和局标技巧在全标下的样子

为了更好地衔接后续的技巧，我还是想贯彻之前教程的样子，单开一个篇目给各位介绍一下前面全部数独技巧，在全标状态下的样子。

当你在看到这些长相后，你以后就不愁看不懂后续下结论的时候为啥图长那样了；另外，我发这些图也是为了体现一下配色方案的约定俗成。后面所有的技巧，配色方案都会采用这样的方式来给各位展示，就不再变动了。

## 唯一余数 <a href="#naked-single" id="naked-single"></a>

先说唯一余数。

<figure><img src="/files/ZS0kE1QgMvgZw5zBKUAH" alt="" width="375"><figcaption><p>唯一余数用例</p></figcaption></figure>

可以看到，唯一余数的结论是 `r9c1 = 1`。不过如果你忽略掉圆圈的话，其实可以看到的是，这个位置其实就一个候选数。这便是全标状态下最简单的情况。候选数的由来不就是数数么。既然只有一个候选数，那么自然它就是唯一余数了。

之所以全标模式下，把唯一余数放排除之前，有个重要的原因就是，因为它更适合在全标模式下使用。我们大家都知道唯一余数在直观层面都难找得很。但是在全标状态下，它都很容易被发现。所以，当你在做全标题目的时候，就适当调整一下技巧的优先级次序。

## 排除 <a href="#hidden-single" id="hidden-single"></a>

<figure><img src="/files/ANsPIoyNMX30PAfTGd7t" alt="" width="375"><figcaption><p>排除用例</p></figcaption></figure>

如图所示，排除的话会稍微麻烦点。

在全标视角下，虽然你仍然可以使用 `r2c3` 和 `r6c2` 的数字 6 来作排除，但是我不是来说这个的。在全标下，`b7` 里填入 6 的位置只有 `r8c1`。你可以仔细看看 `b7` 里所有空格的候选数排列情况。显然，只有 `r8c1` 有 6 这个候选数，而别的三个格子都没有。所以，不是你填还能是谁填？

## 区块 <a href="#locked-candidates" id="locked-candidates"></a>

<figure><img src="/files/yHnrvfqgQQ6dC8TeLtQZ" alt="" width="375"><figcaption><p>宫区块用例</p></figcaption></figure>

如图所示，直观视角我们可以使用数字 4 来作排除。不过在全标下，我们需要看的是候选数的分布。在 `b1` 里，数字 4 只出现在 `r12c2` 里，这样就有了区块的概念了。

然后根据区块，我们可以得到 `r69c2 <> 4` 的结论。

这个是宫区块，因为区块下在 `b1` 里。下面给各位看一则行列区块的例子。这个例子给各位自己看了吧。

<figure><img src="/files/A1nTMYt6W3ZXUolMmJtE" alt="" width="375"><figcaption><p>行列区块用例</p></figcaption></figure>

## 显性数组 <a href="#naked-subset" id="naked-subset"></a>

下面我们来看显性数组。

<figure><img src="/files/4ElRfKkfSie1zJ3f27Qu" alt="" width="375"><figcaption><p>显性数对用例</p></figcaption></figure>

如图所示，这个题的结论是 `r46c3 <> 69`。当然很明显 `r4c3` 也没有 9，只是这里我们用这个结论把它表达写简单一些。

下面我们来看一下显性三数组和显性四数组。

<figure><img src="/files/pBtkHPZFTBGnw8Djm6td" alt="" width="375"><figcaption><p>显性三数组用例</p></figcaption></figure>

然后我们来看显性四数组。

<figure><img src="/files/6oBYwuCBxdXoBQKIXzCV" alt="" width="375"><figcaption><p>显性四数组用例</p></figcaption></figure>

## 隐性数组 <a href="#hidden-subset" id="hidden-subset"></a>

<figure><img src="/files/sRTIeD6qH3KmxiJUi7v8" alt="" width="375"><figcaption><p>隐性数对用例</p></figcaption></figure>

如图所示，这是个隐性数对。从全标下来说，`b6` 填入 5 和 8 的位置只有 `r56c7` 两个单元格。所以，`r56c7` 不能填入其他任何的数字。

可以看到，它除了这些结论外，还有别的结论。这是因为，在去除掉 `r56c7` 的其他数后，它就只剩 5 和 8 了，会变成一个显性数对。然后，我们又可以得到同列的别处不能填 5 或 8 的结论。

这里是我把这两个逻辑整合在一起了，因为只要出现这种样子的数对，就必然会从隐性数对变为显性数对，然后删掉同列别处的位置（当然，也不一定非得同列，可以同行或同宫）。

下面我们来看隐性三数组和隐性四数组。先是隐性三数组。

<figure><img src="/files/3lXQSJxFR5dRxY7o2NLs" alt="" width="375"><figcaption><p>隐性三数组用例</p></figcaption></figure>

再来看看隐性四数组。

<figure><img src="/files/94EWmOUyCzgWDxjdinkZ" alt="" width="375"><figcaption><p>隐性四数组用例</p></figcaption></figure>

## 数组显隐性互补的性质 <a href="#complementary-property-of-subset" id="complementary-property-of-subset"></a>

### 互补性质解释 <a href="#explanation-of-law-of-complement" id="explanation-of-law-of-complement"></a>

可能你会好奇，为什么之前我在介绍数组的时候，规格只到 4。是不存在 4 以上的情况吗？还是说它过于罕见导致没有题或者不想讲（反正也遇不到）的原因吗？

实际上不是的。在最开始我们就提过一点，数组其实只有一种，只是因为视角不同被分成了两种形态。分成两种形态的原因自然是观察难度的不同，以及逻辑推理的不同。但是从本质上来说，其实它们是一样的东西。

下面我们来看一则例子，以说明这两个最终是等价的。

<figure><img src="/files/qsXntgQGYi9RBv2LuOhj" alt=""><figcaption><p>互补例子 1</p></figcaption></figure>

请看这个题目。这个题目存在一个隐性数对结构（左图），删除的数字是图中红色的 6 个数字；而这图同样的宫内存在一个显性四数组（右图），删除的也是这 6 个数字。

这冥冥之中告诉我们它很有可能不是巧合，就是故意这么安排的。那么，这是题目的设计如此么？我们再来看一个例子。

<figure><img src="/files/iJPYQDPrNxlGMD9XD5KO" alt=""><figcaption><p>互补例子 2</p></figcaption></figure>

如图所示。这是另外一个题目。这个题目左图有一个显性数对，它的结论是这三个删数；右图是在同样的行上存在一个隐性三数组，它的结论仍然是这三个删数。

可能你会有所疑惑。两个数组涉及的数字都不一样，凭什么删数恰好都能完全一样呢？这真的不是巧合吗？

不是的。它不是巧合。它就是数组的一个特征，**显隐性互补**（Law of Complement）：

**如果你发现了一个显性数组，那么这个所在的区域下，同时也存在与之互补的隐性数组，使其删数完全一致。另外，显性数组的规格和隐性数组的规格，应等于整个这个区域下的空格数量。反之亦然。**

怎么理解呢？比如说例子 1，`b4` 里一共有 6 个空格。其中隐性数对是 2 个单元格，显性四数组是 4 个单元格，刚好满足 2 + 4 = 6 的情况；而例子 2 里，`r3` 里一共有 5 个空格。其中显性数对是 2 个单元格，隐性三数组是 3 个单元格，也恰好满足 2 + 3 = 5 的情况。

这个互补特征客观成立的点，在于显隐性数组两方，使用的单元格刚好不同。所谓“刚好不同”，是说显性用的格子，隐性一个都不会用。反之亦然。而整好，显性数组用的格子和隐性用的格子全部列到一起，就是整个这个区域下的所有空格。这是互补的本质原因。

那么，这种互补为什么就奏效了呢？请仔细思考一下。显性数组的删数和隐性数组的删数特征都是什么？显性数组一定删的是数组用到的这些数字，而隐性则刚好相反。举个例子。如果一个显性数对用的数字是 5 和 8，那么它的删数也必须得是 5 和 8。而如果一个隐性数对是 5 和 8 的话，那么它的删数只可能是 5 和 8 外的其他所有数字（1、2、3、4、6、7、9 这些）。从数字上讲，它们删数的“取值范围”是互补的——能够凑成一组完整的 1 - 9。

只要我们保证单元格使用完全用满全部的空格，那么所有的数字由于自身就是互补的删数状态，那么我们就可以使得视角从显性转为隐性，或者隐性转为显性，而删数可以保持纹丝不动。

### 为什么数组规格不超过 4？ <a href="#why-size-of-subset-is-not-greater-than-4" id="why-size-of-subset-is-not-greater-than-4"></a>

下面我们来解释另外一个问题。为什么我们学到的数组，规格只有 2、3、4 三种情况呢？这里我们要稍微用一下数学不等式的思维，不难的，请放心。

首先，我们知道，显性数组和隐性数组的规格总和等于这个区域下所有的空格数，那么我们使用字母 $$c$$ 来表示指定元素的数量的话，那么我们不难得到这个式子：

$$
c\_\text{显性数组}+c\_\text{隐性数组}=c\_\text{空格}
$$

我们将它们移向等号的同一侧，然后使用 $$c\_\text{非空格}=9-c\_\text{空格}$$ 的说法将其代换一下，于是我们就有了：

$$
\begin{align\*}
c\_\text{显性数组} + c\_\text{隐性数组} &= c\_\text{空格}\\
c\_\text{显性数组} + c\_\text{隐性数组} &= 9 - c\_\text{非空格}\\
c\_\text{显性数组} + c\_\text{隐性数组} + c\_\text{非空格} &= 9
\end{align\*}
$$

我们使其这么进行一轮式子变形，就有最下面的这个结果。

我们将这里的数字 9 当成一个定值，而不是一个具体的数。既然是定值，那么我们就知道，左边三个数的和一定是个固定结果。

由于求和等于定值，这意味着左边三个元素，一旦有其中一个数变大，那么剩下两个数的和，结果一定就会变小，才能保证结果是一个定值。

我们不妨为了让 $$c\_\text{显性数组}$$ 和 $$c\_\text{隐性数组}$$ 两个数都尽量大，那么我们只好让 $$c\_\text{非空格} = 0$$ 了。那么这个式子在极端情况下会变为这样：

$$
c\_\text{显性数组}+c\_\text{隐性数组}=9
$$

现在我们知道，显性数组和隐性数组的关系一定是一个变大另外一个就会变小的。那么，其中一旦有一个数超过了 5，另外一个数就会变到 4。变为 4 意味着这个数：

1. 保持求和为 9；
2. 比互补的那个数组的规格要更小。

尤其是第二点。比如说显性数组规格开始等于 5 了，那么隐性数组就必须等于 4 以保证求和结果为 9（如果还有非空格的话，那么这个数还会更小）。但是，就这么光看极端情况的话，4 就已经比 5 还小了。这就说明了一点：我们无法让数组规格超过 5——因为互补的那一边一定会有一个规格更小的在等着呢。

这就是为什么数组没有规格超过 5 的情况：虽然理论成立，但实际上根本派不上用场。

### 高规格数组内可能会有低规格数组 <a href="#lower-sized-subset-can-exist-in-large-sized-subset" id="lower-sized-subset-can-exist-in-large-sized-subset"></a>

有些时候，互补过去可能看起来并不是那么正常。下面我们来看一则例子。

<figure><img src="/files/U6nnXxiv0oNWvSJ3Yk1j" alt=""><figcaption><p>互补不正常的情况</p></figcaption></figure>

如图所示，左边是一个隐性数对。按道理来说，取出其他空格就可以直接转为显性四数组（因为空格就 6 个，2 + 4 = 6）。

但是仔细看一下，其实不难发现到的是，右图的数组 4、6、7、8 其实是不太合理的。因为它其实可以只用三个单元格：`r8c236` 就行。这三个单元格的数字 6、7、8 已经足够构成显性数组。把 `r8c7` 招揽进来看起来并不是那么合理。

这个问题我们要先从互补性出发来解释它。首先，互补的时候，我们需要取出 `r8` 里所有没用到的空格一并形成数组结构，这使得冗余的部分 `r8c7` 会被纳入进来。其次，从规则上讲，显性数组本身就是看单元格内部是否在排列上形成占满的思维。三个的很好理解，四个的其实也不是不能理解。强行理解的话，你可以认为里面仅出现了 4、6、7、8 四种不同的数字，刚好在四个单元格里。为了尽量保证数组内部填充不会出现矛盾状态（数字重复什么的），我们会优先先去给可填位置更少的数字优先安排空格填进去。显然，数字 4 只有一处位置可填，所以我们“暂时”让 4 填在 `r8c6`。然后，其他的 6、7、8 分别安排在旁边的三个单元格 `r8c236` 里，似乎也不是不能形成四数组的形式：确实 4、6、7、8 把四个格子的填数机会给占满了。既然席位全部使用完了，那么我们自然就不难想到，同一行的其他单元格就没有机会填入 4、6、7、8，自然就可以使其产生合适的删数。只不过，这里的 4 安放尤为特殊：它仅有一处可填。仅有一处可填意味着 4 最终的摆放只可能在这个单元格上。

这是最难理解的点，也是破解这种奇怪的数组的关键点。数组的本质是，里面只能填入这些数字。“只能”意味着数字不论如何，在这个区域的别处，都不会填入，而填写的最终位置，尽可能在数组内部的这些格子里进行排列组合。如果它有两处，那么最终数组涉及的这个/这些数字，就只有这两处位置放，不是 a 就是 b；如果有三处，就是 a、b、c 来回换呗。那如果就一个位置呢？那我们只能让它就是这个数了。

如果你还理解不了，也没有关系。大不了你回去看看这个题。这个题里，6、7、8 的显性三数组是客观成立的。倘若我们先找到的是这个三数组，那么 4 就不会被纳入进来的话，那么它的删数就会算上 `r8c7(78)`。而要使得这个 4、6、7、8 显性四数组整体成立，`r8c7` 客观上还真不能存在除了 4、6、7、8 以外的数。那么，既然三数组成立了，`r8c7(678)` 就都能删掉。删掉之后，不就真只剩一个数了么？直接唯一余数，得到 `r8c7 = 4`。

不论哪种理解方式，这种情况都是可理解的。换言之，这种数组合法，但是有病。说这个的目的是告诉你两点：

1. 有些时候，显隐性互补后会补出来一个合法但有病的数组。这种数组的特征是，规格很大，但内部其实存在一个规格更小的数组，换言之，其中有一些格子可以不用，数组照样能成立；
2. 显隐性互补的特性在这种情况下用起来并不爽，而我们强行去理解它的本质，其实还是为了使得显隐性互补这个规则，在任何时候都客观成立，仅此而已。

那么，右图里的 `r25c7(4)` 的删数为什么成立，想必就不用我多解释了吧。

好了，所有直观技巧和局标技巧的全标状态就说完了。从下一篇文章开始，我们将正式进入到后续技巧的学习之中。
