# 笔记的概念

下面我们来看如何快速确定数字是否存在可用填数位置的办法。

## 笔记的概念 <a href="#find-available-positions" id="find-available-positions"></a>

现如今电子产品越来越多，玩家更多会采用手机、iOS 等设备使用数独相关 app 游玩数独的游戏。主流的一些数独产品里会提及一种全新的概念。这个概念在早期尚未让数独游戏在电子设备上风靡的时期是没有的。

当用户在使用 app 的时候，按钮里多数会提供一个功能，它可以快速让我们进入到候选数的状态，即前面看到的全盘都有候选数的这个状态。这个功能在应用端一般称为**一键笔记**或**自动笔记**（Auto Notes）。其**笔记**（Note）的概念需要我着重说明一下。

所谓笔记，指的是玩家可操作的候选数单位。是的，它就是候选数，不过是从行为上判断的。当我们在一个直观的盘面上找一些辅助技巧（如我们需要区块排除，此时可能会依赖于区块）的时候，我们方便之后的步骤可能继续使用该位置的结构，我们可能会临时作出标记，避免遗忘。所谓的笔记，就是你往盘面里填充的候选数。它是一点一点往上标的，所以才称为笔记，因为它就跟笔记一样是一点一点写的。

虽然笔记也可能全盘标记，但我们仍然将其称作笔记而非候选数，并不是因为它不是候选数，而是因为它这种行为是我们所需要强调的。

## 全笔记盘面的快速定位 <a href="#quick-locating-in-full-notes" id="quick-locating-in-full-notes"></a>

当你标记了笔记后，你看到的盘面可能是这样的：

<figure><img src="/files/zag3TURKwyfRSanfhZro" alt="" width="375"><figcaption><p>全盘笔记后的样貌</p></figcaption></figure>

如图所示。针对于这种盘面，我们一般会有如下两种直观技巧可用。

### 隐性唯一（排除） <a href="#hidden-single" id="hidden-single"></a>

为了强调，我按照数独 app 的习惯展示数字的高亮效果：

<figure><img src="/files/2mzU3rodjgsSPCDKaoxB" alt="" width="375"><figcaption><p>隐性唯一</p></figcaption></figure>

如图所示。我们会显然发现，`b1` 和 `b4` 的高亮非常“稀疏”。对于 `b1` 而言，很显然我们知道的是，数字 1 能填入的位置就只有 `r2c3` 这一个位置。那么自然结论就很明显了，它就是必须填 1 的，否则 1 就没位置填了。因此，`r2c3 = 1` 就直接可以得到。

从直观的角度来看，这其实就是一个很简单的排除，而且是宫排除（毕竟 1 是在 `b1` 这个宫内出的）；但在笔记标满了的情况下，玩家可能不会按提示数 1 去找排除项，所以这个 1 的本质定位是依赖的“宫内就这一个高亮位置”的思维方式上的。这个逻辑我们在数独里也有名字，叫**隐性唯一**（Hidden Single）。隐性唯一和隐性数组的取名是一致的，因为它在笔记全开的情况下确实是隐藏在盘面之中。虽然隐性唯一本身比隐性数对、隐性三数组这些情况更容易看到，但客观事实是，它确实是藏在盘面里的，你必须要先聚焦于某个行列宫里，确保它真的只有一处可填位置，那么它才能是结论。

哦对，`r7c7 = 1` 可以通过 `r7` 得到隐性唯一的结论。所以，隐性唯一并非只会发生在宫里，只是说宫内的隐性唯一最好定位到。

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

**显性唯一**（Naked Single）就更轻松了。恰好和前一节的内容匹配，显性唯一其实就是唯一余数。只是说，唯一余数看的更侧重于直观，即利用提示数和自己填入的数字来进行推导，但如果你已经笔记标满了，那就大胆一点。

<figure><img src="/files/Nwl4zFEaFp23T8fY6mLH" alt="" width="375"><figcaption><p>显性唯一</p></figcaption></figure>

如图所示。这四个单元格刚好只有唯一的一个笔记。如果你的笔记是确实标全了，那么这四个位置的唯一可填数字必然是这四个单元格的结论。

## 区块定位 <a href="#locating-on-locked-candidates" id="locating-on-locked-candidates"></a>

### 宫区块定位 <a href="#locating-pointing" id="locating-pointing"></a>

我们换一个题。这次尝试一下给各位不展示其他数字的笔记。

当我们要定位区块的时候，我们只需要找到这个区块的笔记位置，然后确保它能够按前一节描述的那样形成区块即可。

<figure><img src="/files/LEBfDdwkLZrB5vlxeJ9W" alt="" width="375"><figcaption><p>区块定位</p></figcaption></figure>

如图所示。当我们知晓数字 6 的所有可填位置有这些时，那么我们必须要形成一个意识和快速判断的方式：很明显，`r1c8` 和 `r2c9` 是不能填 6 的。

这个思路依赖于宫区块的特性——宫内得到只能在同一个行/列上填数。显然，`b1` 就能够形成非常清晰的、数字 6 的区块。同理，`b6` 也是如此。

当我们快速得到这两个区块后，我们自然会有一个结论：`b3` 里填 6 的位置就只有右上角这个 `r1c9` 了。这便是区块技巧的定位的方式。

### 行列区块定位 <a href="#locating-claiming" id="locating-claiming"></a>

<figure><img src="/files/9zIi9bPD6VfZTiF1dNBv" alt="" width="375"><figcaption><p>行列区块定位</p></figcaption></figure>

如图所示。很显然，行列区块就没那么好看了。

这个题里数字 8 就藏了一个行列区块在里面。在哪里呢？`r2` 上。我们只需要确保数字 8 在某个行列上只会出现在同一个宫里就行。也就是反过来看。很显然，数字 8 在 `r2` 上就是行区块。

那么受影响的位置呢？显然就是图里的 `r1c3` 和 `r3c13` 了。这些位置不能填 8。接着呢？接着我们可以用一下前面组合区块的内容：因为 `b17` 里 8 此时已经形成了组合区块，所以 `r4c2 <> 8`，于是 `b4` 就可以填出数字 8 的确切位置了：`r4c1 = 8`。是不是很巧妙？

当然了，打一开始 `r2` 形成区块之前，8 就客观存在组合区块的技巧，因为它不受 `r1c3`、`r3c13` 这三个单元格删除 8 的影响。而且，就算行区块有了之后，删除 8 的情况后，`c1` 上就有了隐性唯一。不过，从初学的角度而言，我个人并不认为玩家可以立刻看见 `r2` 的行区块和出了区块结论之后得到的这个隐性唯一。可能更多的玩家会按部就班地进行区块删数，然后组合区块删数，然后出数的三步流程，毕竟，除了第一步的行区块确实比较困难以外，组合区块和最后 `b4` 里出 1 的隐性唯一的这个做法确实都只依赖于宫这种区域类型，它比较容易看见。

不管怎么说，无论你使用哪一种思路，行列区块的定位就是这样，只需要将宫区块的逻辑反过来找就行了。

## 循环态的概念 <a href="#concept-of-cycling-pattern" id="concept-of-cycling-pattern"></a>

既然你习惯了笔记的内容，那么这里不得不为各位介绍一下数字是否还存在前文所描述的结论的办法。

<figure><img src="/files/5ImLv44kjCg2W176g6O5" alt="" width="375"><figcaption><p>循环态介绍</p></figcaption></figure>

如图所示。这还是刚才那个题，不过我换了一个数字高亮呈现。很显然，数字 1 此时一定存在两种填法：

* `r4c7` 和 `r8c8` 填 1；
* `r4c8` 和 `r8c7` 填 1。

这两种情况似乎填哪种都不会影响后续填数的逻辑。换言之，我们没有任何办法可以立刻判断出来这两种填法哪一种正确。我们把这种 1 的摆放效果称为**循环态**（Cycling Pattern）。

对于这种循环态，我们是具有一些快速判断的办法的。只要一个数字的所有摆放位置形成了循环态，那么我们就可以认为这个数字目前不能有结论，于是我们需要跳转到别的数字再看。

很显然，上面的例子里数字 1 是形成了一个可置换的情况的。但是，这种可置换的情况看起来还比较简单，所以不费吹灰之力我们就可以知道它不能填数；不过更多的时候它不会这样。

<figure><img src="/files/TJV4uRHUkk0pwBzHjPit" alt="" width="375"><figcaption><p>数字 4 的循环态</p></figcaption></figure>

如图所示。同一个题里的数字 4 也是循环的。它和数字 1 的循环态的区别只在它多用了一个宫——数字 4 用了三个宫。不过，把 4 提取出来就可以发现，每一行、每一列和每一个宫都有两个可以填充的摆放位置，我们显然无法正确定位它的具体填法，所以它也是循环态。

<figure><img src="/files/EVK0BgzJJunIEi1nHXxI" alt="" width="375"><figcaption><p>数字 8 的循环态</p></figcaption></figure>

如图所示。这种也属于循环态。看起来分配的位置有很多（足足 8 个可填位置），但实际上是俩独立的组合区块。这很显然无法造成可用结论。

<figure><img src="/files/nJSSSaSXEp3IwgT4iuTR" alt="" width="375"><figcaption><p>数字 2 不是循环态</p></figcaption></figure>

如图所示。数字 2 就不是循环态。这看起来非常复杂，不过没事，本身也确实有问题。可以看到 `b4` 明显形成了区块，所以至少可以去掉 `r3c1(2)` 这个情况。

不过余下的结构是否是循环态，我们还需要更为复杂的讨论。按照循环态的标准定义规则，它其实是满足的，它内部无法继续确保合理的填数具体是哪个组合。但是，我更建议大家在做题的时候，先确保其他数字的、关于前面介绍过的基础技巧都用完了，确实用无可用时，再来看这种结构。

循环态的用法并非想强调定义是如何的，而是希望各位看到它的时候能有个意识，认为它无法有结论，进而快速跳过此数，以节省做题时间。

## 笔记 ≠ 候选数 <a href="#notes-are-not-candidates" id="notes-are-not-candidates"></a>

在平时做题的时候，我们会从无到有标注笔记来辅助我们做题。通常意义上，区块我们是不会参与标记的，因为作用不大，而且会扰乱市面上众多应用对技巧计算的逻辑。

举个例子。我们拿这款产品举例，可以看到，我在题目里标注了一些笔记，其中包含一个数对和一个区块：

<figure><img src="/files/Zn9WnMMvFpluDOmQ8E4a" alt="" width="188"><figcaption><p>某款产品里标注笔记的画面</p></figcaption></figure>

可以看到，右上角 `b3` 被我们标注了 9 的区块。这是可以通过最直接的数字 9 的排除得到。但是，一些市面上的数独应用在计算提示的时候，会参考用户所标记的笔记。但用户的笔记总是不全的。什么意思呢？比如说 `r3c7` 这个单元格，很明显它还能填入数字 1、3、6，但我们因为区块而标注了数字 9。

在提示的计算时，要么应用会认为你的笔记不全而跳过它的计算，要么它会强行视为这个单元格只有候选数 9 而猜测这是唯一余数技巧。这显然是不对的。严格的笔记标注是需要复杂的推算的，而只给予小部分的区块就填写进去很多时候不仅带不来任何有意义的信息传递，而且还会扰乱应用，造成推算失败或失效。我们当然知道这个只是区块 9，但绝对意义上讲，区块 9 不应分散到两个单元格里标注其笔记。从机理上讲，它更像是需要我们对 `r3c78` 整体进行区块 9 的标注，而非对单元格的标注。只是单纯因为应用大多不支持直接将一堆单元格看成整体，所以只能这么标而已。

这是我想说的。标注笔记的目的在于辅助我们推理。如果它没有提供任何优质的推算提示和暗示，那么它就没有任何标注的意义；与此同时，笔记不等于候选数，候选数是严格按照唯一余数的操作对每个单元格都有完整、正确和严谨处理的，而笔记不是。倒不是说人总是会犯错，但大多数时候，我们并不需要给所有空格都标满全部可能性，这不仅对做题帮助不大，而且还增大了我们找技巧的复杂度和观察难度。如果不是非常困难的题目，一般我们都不建议全部都标上。


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://sudoku.kazusa.tech/partial-marking-technique/05-strategying-phase-2/03-concept-of-notes.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
