# 排除

**排除**（Crosshatching），也叫**排除法**，是数独里最常见的一种技巧。按照游戏具备的行、列、宫三大要素，排除也会分为这样三个类型。

> 排除早期也被称为**摒（bìng）除**，一般认为是台湾地区引入数独的时候传入大陆的说法。后续还有一些技巧也会沿用台湾的叫法称呼，到时候也会说明一下。

## 宫排除（Crosshatching in Block） <a href="#crosshatching-in-block" id="crosshatching-in-block"></a>

我们把顺序调整一下，先来说说**宫排除**（Crosshatching in Block）。

<figure><img src="/files/5bPpqUbx7lQvYYPmRVL0" alt="" width="375"><figcaption><p>宫排除</p></figcaption></figure>

如图所示，我们把目光聚焦到第 7 宫里。

> 哦对，第 7 宫是左下角这个宫。宫的编号按照从左到右、从上到下的次序依次编号。最上层的三个宫分别为第 1、2、3 宫，中间层的为第 4、5、6 宫，而最下层的则是第 7、8、9 宫。左下角编号是 7，所以就叫第 7 宫。
>
> 另外，按照本教程的“尿性”，我们后续会一直使用 RCB 表达。因为 `r` 表示行，`c` 表示列，而 `b` 表示宫，因此 `b7` 可直接用于表示第 7 宫。后续我们也会使用这种方式来描述一些行、列、宫的具体编号。

我们需要遵守的数独规则里，其中一点是要求每一个行、列、宫都要有完整的一套 1 - 9。遵循这个规则我们深思一下。一个行、列、宫都有恰好 9 个格子，而完整的一套数字 1 - 9 又刚好是 9 种不同的数。那么我们安排每一个数出现一个放进去的话，就刚好用完了全部的 9 个单元格。因此，一旦中间出现重复的数字，那么那个重复的数字就会占用两个单元格及以上的名额，导致余下的 8 种数字无法再合理地安排进去了。换言之，必然会有一个数字最后无法填入其中，即保证不了完整一套 1 - 9 了。所以，完整的一套 1 - 9 暗含了一个意思：所有的数字不允许出现重复项。

按照这个说法，显然 `b7` 也不例外。我们发现，由于 `r2c1` 和 `r8c9` 都是 1 后，他们各自的所在行和列上都不允许再出现第二个 1 了，否则就违反了“不允许有重复项”的规则。正是因为此规则，图中打叉的位置都不能是 1。而纵观整个 `b7`，就只剩下唯一一处可以填 1 的位置。因为 `b7` 没有 1，那么 1 必须出现在其中，因此我们只能把 1 安排在唯一的那一处位置上。因此我们就得到了 `r9c3 = 1`。

由于这个技巧的推理结论下在 `b7` 之中，所以我们把这个推理过程（我们所谓的“技巧”）称为宫排除，即通过排除得到宫内结论的一种手段。

## 行排除（Crosshatching in Row） <a href="#crosshatching-in-row" id="crosshatching-in-row"></a>

<figure><img src="/files/T6IDMAD1LcTbAZRrf3bp" alt="" width="375"><figcaption><p>行排除</p></figcaption></figure>

如图所示，图中除了黑色的提示数外，我们还可以通过才学到的宫排除完整一些蓝色位置的填数。我们把这些蓝色的数字称为**填入数**（Modifiable）。填入数有些时候也可以参与推理过程，并不是说填上之后就放在那里“吃灰”了。当然，填入数最后会因为我们的推理顺畅而变得越来越多，因此部分填入数确实不一定会发挥它的推理的作用，所以这取决于你自己的灵活变通了。

> 在早期的教程里，填入数还被称为**确定值**。不过本教程暂时弃用这种说法，因为不够直观。

此时我们观察第 3 行（也就是 `r3`）。我们可以明显观察到，第 3 行需要满足一套完整的 1 - 9 的话，只缺少 5 和 9 尚未填入了。

而只关注于 5 的话，我们可以明显发现，`r9c2` 是 5。因为同列不能填入重复的 5，因此身处同一列的 `r3c2` 自然就不能是 5 了。那么，由于 `r3` 必须拥有一个 5 的填入，因此填入 5 的机会只能给到 `r3c8`。因此，图中的结论就是 `r3c8 = 5`。

我们把这个技巧称为**行排除**（Crosshatching in Row），因为他的填数位置是在 `r3` 之中的。

## 列排除（Crosshatching in Column） <a href="#crosshatching-in-column" id="crosshatching-in-column"></a>

下面我们来说说最后一种类型的排除。

<figure><img src="/files/gcL9dm3qKDq4WAaoDQvp" alt="" width="375"><figcaption></figcaption></figure>

如图所示，这一次我们把目光聚焦到第 8 列（即 `c8`）。

我们发现，数字 7 没有出现在 `c8` 里，因此 7 必须填进去一个。随后我们发现，`r1c2` 已经是 7，所以同一行不能填入 7，所以与之同一行的 `r1c8` 自然就不能是 7 了。不过，还剩下三处打叉的位置，这又是怎么排除的呢？

其实这里我们只需要一个数就可以参与排除了。注意到 `r4c7`。由于数独规则里，同一个行、列、宫里都不能有重复的数字。我们前面用到的只有行和列，这里我们要用到的是宫的排除因素。因为同一个宫也不允许有重复的数字，因此 7 出现在 `b6` 之中，也就意味着 `b6` 的别处都不能填入 7。所以，三处打叉的位置都和这个单元格同宫，因此他们都不能是 7。

这么一说，这个 7 的位置就比较明了了。`c8` 里此时仅剩下唯一一处填入 7 的位置：`r2c8`。因此，它必须是 7。

我们把这个技巧称为**列排除**（Crosshatching in Column），因为结论下在 `c8`。

> 另外，行排除和列排除在不那么需要强调行还是列的时候，也可以合并称为**行列排除**（Crosshatching in Line）。

## 问题答疑 <a href="#q-and-a" id="q-and-a"></a>

下面列举一些常见的、关于排除技巧的问题。这可能对你初学排除技巧有所帮助。

### 问题 1：在找行列排除时，宫内别处似乎也可以填它，为啥不能是它填？ <a href="#question-1" id="question-1"></a>

为了更加详细地解释这个问题，我们使用前面行排除的题目给大家解释一下问题问的是什么。这个问题也是经常有朋友询问我的一个问题。

<figure><img src="/files/T6IDMAD1LcTbAZRrf3bp" alt="" width="375"><figcaption><p>还是那个行排除</p></figcaption></figure>

如图所示。这就是刚才的那个行排除的题。有些朋友会问，我们使用了行排除的推演逻辑，用到的是下方 `r9c2` 处的 5。这个 5 虽然可以得到 `r3c8 = 5` 的推演结论，但是凭什么 `r1c8` 就不能是 5 了呢？

我个人觉得，问出这种问题的朋友具有发散的思维，这是好事。但这里我们并未对 `r1c8` 是否是 5 作出任何的推断。相反，数独的三大约束条件：行、列、宫的重要性是等同的。我们知道宫的逻辑后，就很容易思维转不过来，而在看行列排除时，误用或错用宫的逻辑去思考它，导致推断逻辑的混淆。显然，这里 `r1c8` 是否是 5 并不重要。我们观察的点始终都在 `r3` 上。

而从另一个角度来说，有些朋友更希望使用反证法的思维去推演矛盾，进而得到假设错误的思路。套用在这里也是可行的。比如我们反过来思考这个地方。如果我们让 `r1c8 = 5`，那么因为 `r3c8` 和 `r1c8` 同宫（也可以理解为同列），因此 `r3c8` 就不能填 5 了。而它不能是 5，同行还剩下唯一一处空格 `r3c2` 也会被最下面 `r9c2` 的 5 给排除掉，这导致了一个问题：`r3` 将不存在任何空格填 5。而它必须填有一个 5 以满足一套完整 1 - 9 的规则。所以这不就矛盾了嘛。因为假设的是 `r1c8 = 5`，所以假设不成立，故 `r1c8` 它不能是 5。

这种理解也没毛病，但这稍微绕了一些。我仍然推荐用正向的思路去理解这个问题。

总之，数独是一个严格的推理游戏，一旦有一个环节有错误的推断，那么后面必然就会产生矛盾。

### 问题 2：为什么不惜打乱顺序，先讲宫排除？ <a href="#question-2" id="question-2"></a>

这个问题其实存在一个非常具有说服力的原因：因为宫的观察更简单。

虽然宫是数独所独有的一种概念（你想想看，别的表格类型的谜题玩法是不是一般都只有行和列两种要素），所以相对于其他谜题玩法来说，数独的宫的因素更为陌生。初学肯定是比较难受的。但是，它的外观是 3 × 3 的正方形形态。不论放在盘面的哪一个位置（左上角也好、右下角也好，中间也好，两边也好），似乎这个正方形的形状都不会因为放的位置而变化。

这个的好处在于，它更容易被我们的人眼所聚焦。所有的 9 个单元格分布在比较紧凑的一坨里，这反而让我们觉得宫的聚焦更加容易。剩下的就是数空格的填数缺少什么，以及走外面找“外援”（排除项）了。然后我们再反过来看行列排除。行列排除最致命的问题是，它是 1 × 9 或 9 × 1 的长条形状。但凡盘面稍微大一些（物理层面的大——像素点更多、图片更大之类的），我们的人眼就必须尝试去从上往下、从左往右扫描一遍完整的 9 个格子，才能得到缺少的数字。

而缺少的数字有些时候会比较难以得到。因为数数稍微慢一些的朋友会觉得，缺少的数字需要我们大脑里临时记一下，而本身长条形状的 9 个单元格会让我们做起题来潜移默化增大了难度——又要临时记忆，又要横纵大幅度扫描。这便是行列排除比较致命的问题。所以，它的推理逻辑都不难，难的点仅在于观察上。

我在建议你做题的时候，也使用先宫排除，后行列排除的方式来完成。在迫不得已的时候（例如题确实没有宫排除的可用结论，或实在是找不着宫排除的时候），再来找行列排除；灵活变动你的推理思维，这是最重要的。

### 问题 3：做题的方式？ <a href="#question-3" id="question-3"></a>

这是第一个讲解的数独技巧，因此需要给大家介绍一下，做题的一些方式和套路，以便在你不熟悉数独的时候也有一个下手的切入点。

数独虽然看起来难，它满篇都是数字，但它的题目在平时我们不论在 app 上，还是网上找到的打印的题目，都并不难。从最入门的技巧开始，排除都是我们的必经之路，因此，排除肯定是最常见的数独技巧，这样的题目也肯定占比更多。

这并不是说数独没有难题。但数独现阶段作入门来讲，排除肯定是最基础的技巧，所以不论难度怎么划分，只要是入门级的题，就势必可以只用排除技巧完成。我们不要拘泥于某个达成的目标，比如做题的耗时什么的。先从 0 到 1，再尝试从 1 到 10，再从 10 到 100。这个循序渐进的过程是必须有的。初学数独的时候，哪怕只用宫排除的题目，做 20 分钟甚至更多时间的朋友大有人在，而如果你一旦熟悉了这个技巧，那么提速就会非常快，甚至进入 10 分钟、5 分钟，甚至 3 分钟以内。我们一定要有耐心。

这是第一个要说的。第二个要说的是，我们怎么去找切入点。我拿一个例子给大家介绍一下，我是怎么做题目的。

<figure><img src="/files/yRaMdEwr18vgwv0TSDqx" alt="" width="375"><figcaption><p>一个宫排除的题目</p></figcaption></figure>

如图所示。我们要想完成它，就需要找一个切入点。我们刚才学到的排除，不论是宫还是行列排除，全都是只跟单一的数字有关的技巧。那么我们尝试按数字，将提示数分为 9 种不同的阶段来逐一完成；如果发现某一个数无论如何也完整完成不了，也别灰心，可能题就是这么设计的，那么跳到下一个数继续做就行了。

举个例子。这个题目我们先从数字 1 切入，看看 1 的分布都有哪些位置。很明显我们发现到，第 3、6、7 宫还没有填 1。刚才我们说我们优先找宫排除，所以我们就按第 3、6、7 宫的次序逐一击破即可。

> RCB 表达可以简写。例如第 3 宫、第 6 宫和第 7 宫可以直接把数字拼在一起，简写为 `b367`。这个用法后续可能会用到，到时候也会反复强调，直到我觉得你记住了它为止。

先看 `b3`。我们发现似乎 `b3` 并没有合适的、关于数字 1 的结论，因为似乎 `r1c7` 和 `r1c9` 都可以填 1，那我们就跳过它，来看 `b6`。`b6` 可以填 1 的位置只有 `r4c9`。这很明显。

<figure><img src="/files/bLSEk7Hjg5B6cHABQhWw" alt="" width="375"><figcaption><p>b6 填 1 的位置</p></figcaption></figure>

同理，`b7` 也存在可以填 1 的位置，将其填入。

<figure><img src="/files/v1mF0PCEAR5EMsTxPAwY" alt="" width="375"><figcaption><p>b7 填 1 的位置</p></figcaption></figure>

所以我们连续填出两个 1 的位置。由于 `b6` 填了 1，所以整个盘面里还剩下唯一一处 1 的位置，把他填上即可。

<figure><img src="/files/5V8P785KN0PwmJdQlfPX" alt="" width="375"><figcaption><p>1 全部填完</p></figcaption></figure>

这样一来，所有的数字 1 全部被我们击破。此时，盘面还剩下 8 种数字没有填了，我们继续填 2 即可。后面的数字就不再演示了。这个题的难度也不大，可以自己从头做一下。


---

# 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/direct-technique/01-crosshatching.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.
