# 有技巧名的强制链

## 归并强制链（Merged Forcing Chains） <a href="#merged-forcing-chains" id="merged-forcing-chains"></a>

可以看到，前面在假设过程之中，我们用到的思路都是在假设某一个节点为真或假时候引发矛盾。下面我们来看强制链在合并后产生的删数效果。

<figure><img src="https://3269563042-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FBwg2o9WwhosLFTuqyR3w%2Fuploads%2FABNV9fxDk2kd5bmwSHSQ%2Fimage.png?alt=media&#x26;token=570c3338-e384-442a-868c-9616b8fc8139" alt="" width="375"><figcaption><p>归并强制链</p></figcaption></figure>

如图所示。这个链的表示如下：

```
7r23c2:
  9r23c2-9r1c1
  (7-9)r9c2=9r9c7-9r1c7
7r3c5:
  (7-9)r1c5
```

之前我们介绍的强制链都是从一个节点出发的。这次我们从多个不同节点出发看看能不能推理。比如这个题，我们可以看到， 终点三个分支都指向同一个区域的三个同一个数字的摆放位置，这一点保留了下来；但是起点完全不一样。之前的起点还保留了同一个节点作为初始假设，这次倒好，直接都不一样了。

这是否能推理呢？答案是可以的。这里干脆我们把删数也作为节点纳入到链里，但是分开看。比如这个题，我们先看 `r3c1(7)` 这个候选数。

假设把他视为一个普通节点来看的话，那么它的下一个节点可以是 `r23c2(7)` 或者 `r3c5(7)`。因为之后的推理是强链关系出去的，所以我们这里添加的应该是一条弱链关系。换言之，我们应假设 `r3c1(7)` 纳入时的状态是假设它为真。那么，纳入后，可以看到这个链就退化为了一个很普通的区域强制链，并得到最终 `r1` 所有填 9 的位置全部为假，引发了矛盾。所以，这个假设不成立。

对于 `r3c3(7)` 而言，好像天助我也一般，它也可以纳入到强制链之中，并接入刚才完全相同的这两个节点，并仍然可以得到同样的矛盾。所以，这样一口气强制链就可以删两个数。

明白了吧。这种强制链仍然是普通的区域强制链或者单元格强制链，只不过我们把开始的节点稍微延后了一步：因为强制链的删数一般只有一个，所以我们延后了节点后，每个分支对应的起点发生了变化。那么他们就可以用类似普通链里“头尾删交集”的效果找出除了延后之前的那个节点以外，还可以纳入的节点都有哪些。然后一并删除。我们把这个过程称为**归并强制链**（Merged Forcing Chains），即把分支延后后归并得到多个删数的强制链逻辑。它提供了一个找多个删数的强制链的视角。

我们再来看一个例子。

<figure><img src="https://3269563042-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FBwg2o9WwhosLFTuqyR3w%2Fuploads%2FtjHdpGikz6JHOzHinOT7%2Fimage.png?alt=media&#x26;token=e60171a6-4578-4457-8c25-c03bc3541ea0" alt="" width="375"><figcaption><p>归并强制链，另一个例子</p></figcaption></figure>

如图所示，这条链的表示如下：

```
7r9c5:
  (7-4)r7c4=(4-6)r1c4
  (7-6)r7c4
6r9c1:
  6r5c1-6r5c4
  6r5c1-6r5c456=9r5c45-9r5c7=9r1c7-(9=2)r2c8-2r3c8=(2-6)r3c4
```

这个题有四个分支，并归并为两个部分。

## 鳍链（Finned Chain） <a href="#finned-chain" id="finned-chain"></a>

### 基本推理 <a href="#reasoning-of-finned-chain" id="reasoning-of-finned-chain"></a>

试想一下，如果强制链的分支里有一个分支起步就是夭折的，这种链会有删数吗？

<figure><img src="https://3269563042-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FBwg2o9WwhosLFTuqyR3w%2Fuploads%2F34uvFtIy2kTCkQzZvaFX%2Fimage.png?alt=media&#x26;token=1c82ca5e-e809-472e-8ec3-f4c444998d6b" alt="" width="375"><figcaption><p>鳍链</p></figcaption></figure>

如图所示。假设我们先忽略掉 `r1c5(4)`，我们就可以看到一个完整的链（准确来说，叫区块不连续环）：

```
4r4c6=6r3c6-(6=1)r1c5-1r3c46=1r3c9-1r2c7=(1-3)r6c7=3r6c5
```

然后就有了这样的删数。但是，看起来似乎多出来的 `r1c5(4)` 也并不会影响链的删数，因为这个多出来的数填到格子里，也可以删掉 `r6c5(4)`。所以，按鱼鳍的思路看这个数的话，它具有如下的两个情况：

* 如果 `r1c5(4)` 为假，则链成立，删数是 `r6c5(4)`；
* 如果 `r1c5(4)` 为真，则删除行列宫其余位置的 4，也包含 `r6c5(4)`。

所以，这个题的结论是 `r6c5 <> 4`。

可以看到，这是一个普通的链，外加了一个“鱼鳍”。我们把这种链称为**鳍链**（Finned Chain）。

我们再来看一个例子。

<figure><img src="https://3269563042-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FBwg2o9WwhosLFTuqyR3w%2Fuploads%2F4yoBqFnmSrX9rW0ZWWht%2Fimage.png?alt=media&#x26;token=bfc0d3b5-5371-4653-92ad-65b173c41547" alt="" width="375"><figcaption><p>鳍链。另一个例子</p></figcaption></figure>

如图所示。这个例子也自己看吧。这个例子用了两个鱼鳍，假设方式是一样的，先假设鱼鳍都不存在，然后引出链；然后假设鱼鳍存在，于是按鱼鳍存在的位置删，最终交集删数。

### 这也叫强制链？ <a href="#is-it-a-forcing-chains" id="is-it-a-forcing-chains"></a>

你可能会问，这是强制链吗？是的，虽然看起来像是鱼鳍和普通链的结合，但如果你把鱼鳍视为一个独立的分支，并把其中任意一个强链关系拆解为一组可以用于删数的分支的话，那它就会变为强制链的视角。比如这个题，对于 `b9` 而言，一共有 4 处可以填 5 的位置。那么按照强制链的视角，讨论 5 的全部填数位置，其中两个分支（鱼鳍）将因为假设为真导致直接构成删数；剩下两个分支，就是图中连接为强链关系的 `r7c8(5)` 和 `r8c7(5)` 了。把它俩拆开，然后形成两个分支最终仍然可以到达 `r1c9(5)` 的地方。因此，它其实是可以转为强制链的视角的（尽管这非常没有必要）。

那么至此我们就把强制链的内容介绍完了。
