标准数独技巧教程
标准数独技巧教程
  • 数独概述
    • 初来乍到
    • 坐标
    • 数独历史
  • 直观技巧
    • 排除
    • 唯一余数
    • 剩余数的概念
  • 局部标记技巧
    • 割补(LoL)
    • 直观区块
    • 直观数组
      • 直观隐性数组
      • 直观显性数组
    • 直观复杂出数
  • 基础候选数技巧
    • 候选数的概念
    • 直观和局标技巧在全标下的样子
    • 标准鱼
      • 鱼的基本推理
      • 鳍鱼
      • 退化鱼
      • 孪生鱼
      • 鱼的直观和互补性
      • 鱼的命名
    • XY-Wing 及推广
      • XY-Wing 及推广的基本推理
      • XY-Wing 及推广的残缺逻辑
    • W-Wing
    • 唯一矩形(UR)
      • 唯一矩形的基本推理
      • 唯一矩形的类型
      • 残缺唯一矩形
    • 可规避矩形(AR)
    • 唯一环(UL)
      • 唯一环的基本推理
      • 唯一环的形成条件
      • 唯一环的规格推广
    • 拓展矩形(XR)
      • 拓展矩形的基本推理
      • 拓展矩形的规格推广
    • 全双值格致死解法(BUG)
      • 全双值格致死解法的基本推理
      • 全双值格致死解法的其他类型
    • 欠一数组(ALC)
    • 融合待定数组(SdC)
    • 跨区数组(DDS)
    • 伪数组(ESP)
    • 均衡数组
    • 烟花数组
      • 烟花数组的基本推理
      • 烟花数组的各种用法
  • 链理论
    • 双强链
    • 同数链和异数链
      • 同数链和异数链的定义
      • 头尾异数链的删数规则
      • 不连续环的两种模式
      • 有技巧名的异数链
    • 区块链
    • 待定数组链(ALS 链)
      • 链关系的第二定义
      • 有技巧名的待定数组结构
      • 在链里的待定数组
    • 隐性待定数组链(AHS 链)
    • 毛刺数组链
    • 待定唯一矩形链(AUR 链)
    • 待定可规避矩形链(AAR 链)
    • 环
      • 环的基本推理
      • 数组、鱼和欠一数对的环视角
      • 区块环
    • 强制链
      • 强制链的基本推理
      • 有技巧名的强制链
    • 动态链
      • 动态链的基本推理
      • 动态强制链
      • 动态环的删数
  • 附录
    • 术语索引
  • 逻辑学基础
    • 逻辑学简要介绍
    • 分情况讨论和析取消去
    • 反证法
  • 组合数学基础
    • 抽屉原理/鸽巢原理
  • 其他
    • 作者介绍
    • 版权声明
由 GitBook 提供支持
在本页
  • 连续环(Continuous Nice Loop)
  • 环的一些特征
  • 长度和节点数为偶数
  • 相邻节点真假性互斥
  • 只有两种填数状态
  • 任意节点都可作为环的头
  • 鱼环(Fishy Cycle)
  • 双值格环(XY-Cycle)
  • 其他问题
  • 英文名里我们应该用 Loop 还是 Cycle?
  • 环的尤里卡记法
  1. 链理论
  2. 环

环的基本推理

Reasoning of Loop

最后更新于7天前

什么是环呢?我们先来看一个例子。

连续环(Continuous Nice Loop)

如图所示。这是一个普通得不能再普通的环。红色的全是删数(一共有 11 个),不过我们得一点一点来学。这个环的写法如下:

(8=7)r1c2-7r3c1=(7-1)r6c1=(1-2)r6c2=2r6c5-(2=3)r5c4-(3=5)r7c4-5r7c6=(5-8)r4c6=8r1c6-8r1c2

我们发现,这个链的强弱关系完全交替进行,但我们绕着环看一整圈都未必能发现起点在哪里。既然如此,我们为了强制能看成链,我们任意拆掉其中一个弱链关系,把它断开,因为断开的是弱链关系,所以头尾的强链关系得以保留,链仍然可以成立。

就这么干。我们发现,比如我们断开 8r1c2-8r1c6 这个弱链关系,那么这个环就会从 r1c2(8) 开始往下走,然后走了一条很长的链回到 r1c6(8) 结束。此时,因为链是成立的,所以删数应该看的是头尾的交集。链头是 r1c2(8),而链尾是 r1c6(8)。他们同在一个行上(这不废话吗?)。所以,同一行上的其余位置的候选数 8 理应是可以去掉的。这样我们就得到了 r1c9 <> 8 的结论。

看起来,这个环路因为强弱是完全交替的,所以看起来似乎断开哪一个弱链关系都不会影响到链的成立。那么我们把所有弱链每一个都断开一下,然后去找删数。我们就可以发现,把他们每一个断开后找到的删数序列全部整理出来,便是这个图里画出来的所有红色的删数。

这里要补充一点:千万别忘了单元格里的删数。比如例子里 r6c1(3) 可以删,它删数的由来是断开了 (7-1)r6c1 这个弱链关系得到的。而因为链的头尾均在同一个单元格,所以这个单元格里必须填一个 1 或 7,所以别的候选数都填不进去。

我们把这个技巧称为连续环(Continuous Nice Loop,简称 CNL),一般也简称为环。

实际上,环的极限远不止这样。下面我们来看一个例子,一共有 17 个删数。

你可以自己看看这个例子。虽然看着挺复杂的,但是好在它其实就是多用了几次强弱链关系的编排方式而已,只要链能看明白,环肯定就能看明白。

环的一些特征

从前面的例子可以看出来,环具有如下的一些特征:

  • 任意弱链关系都可以拆掉,剩下的都将构成一个链;

  • 环里的所有弱链关系都可以转化为强链关系;

  • 环的节点数和强弱链关系个数都一定是偶数;

  • 环里任意相邻两个节点的真假性互斥;

  • 环只有两种填数状态;

  • 任意节点都可以作为整个环的开头。

这第一个说法是废话,因为我们利用的就是这个特征在解释环的删数原理,所以我们就不解释了。不过这里我们可以补充一下。因为环的所有弱链关系均可断开并使用链的删数规则找删数,那么在删数完成后,你再去看这个弱链关系你就会发现,弱链此时会变为强链关系,因为这两个节点不存在其他位置摆放,直接就使得了不同假的状态的成立,这便是第二点“可转化为强链关系”的真正原因。所以,这一句话倒也不完全是废话。

长度和节点数为偶数

这个稍加思索就可以得到。因为强弱链需要交替成环,那么强弱链的关系数量一定是一样多的。既然是一样多的,假定我们有 nnn 个强链关系和弱链关系,那么总数量就是 n+n=2nn + n = 2nn+n=2n 个。这肯定是一个偶数。

而在环里,因为不存在独立的节点,所以一个节点引出一个强链关系或一个弱链关系,自然也得是 2n2n2n 个。所以节点数也是偶数。

相邻节点真假性互斥

从客观角度来说,一个节点的真假性一共就只有两种:真或假。那么对于两个节点而言,就会有四种情况:真和真、真和假、假和真、假和假。

对于强链关系而言,两个节点必须不同假,因此四个组合里排除掉“假和假”这个情况,还剩下三种满足题意。而它俩能同真吗?看起来可以,但实际上不能。因为节点数量是偶数个,所以只有可能真假性交替出现才能导致环的结构稳定。如果某相邻两个强链关系节点是同真的状态,则这个环就没办法顺次成环状态推导了,毕竟,链理论要求我们按填和不填交替推理,自然在环里就不可能存在相邻节点同真的状态。这一点和普通的链还是不一样的。

所以,两个节点只可能一真一假,即互斥的状态。

只有两种填数状态

既然我们知道相邻节点的填数状态必然互斥,那么整个环又要保证真假性交替出现,自然就只有两种填数可能。我们随意选一个节点开始,设它为假,那么真假性交替起来之后,就会得到一个序列:

  • 假、真、假、真、假、真、……、真

如果我们再设它为真,就会得到完全相反的序列:

  • 真、假、真、假、真、假、……、假

因为是偶数个节点,所以头尾两个节点真假性必然也是相反的,因为它俩客观来说是在环里是相邻的节点。于是,环就只有这两种填法。

任意节点都可作为环的头

然后是最后一条。这一条稍微麻烦一些。它需要链的双向性来得到证明。

我们先来回顾一下链的双向性。由于链使用的强弱链关系在定义上是方向对称的。所谓方向对称,就是说你正向和逆向都可以使用同一个规则进行推导。比如强链关系,能从 AAA 到 BBB 就一定也能从 BBB 到 AAA。正是因为这个原因,再加上链自身强弱关系的摆放也是对称的(强 - 弱 - 强 - 弱 - 强等等),所以链自身也具备可以逆向推理的过程,即正向的链可以进行正常推导,则逆向的也可以推导。

那么,对于环而言,所有同一个真假性的节点一组,就会把节点分为两组。环的推理是不知道从哪里开始的,那么我们不妨就让所有真假性为假的这一组节点作为链头。这样我们按照链的正常方向就可以得到一条完整的环。那么对于真假性设为真的这一组节点呢?我们只需要把环给完全反个向,此时设为真的节点就会变为设为假。

我想你估计可以理解它,但我还是把这句话给解释一下。因为按照链的基本规则,我们必须要以强链起头,所以设为真的这一组是没办法按预设的那个方向推导的(它起步就为真,但链的起步必须是假)。那么反向之后,强链关系毕竟不会受到反向的影响,所以强链关系依旧成立。比如说我们有 AAA 和 BBB 两个节点是强链关系。那么原本我们假设的是 AAA 节点为假和 BBB 节点为真,现在我们反向了之后,BBB 节点就会变为强链的开端,而 AAA 节点此时反而放在了 BBB 的后面。而强链关系是开端的一边设为假的,所以变为 BBB 节点开始时,它理应设为假。这就是我刚才说为啥原本设为真的会变为假的原因。当然,这里你也可以使用逆否命题来理解:¬A→B\lnot A \to B¬A→B 的逆否命题是 ¬B→A\lnot B \to A¬B→A,这个更靠近数学说法一些。

随便你怎么理解吧,反正它的真假性会因为反向后变为假,所以理应所有节点都是有假这个状态的,所以他们都可以作为环的开头而存在。

所以,环是没有逻辑上的“链头”的,任意一个节点都可以开头,只是说它最多会取决于你选取的环的方向罢了。

鱼环(Fishy Cycle)

为了技巧的完整性,这里我们再补充一个技巧。

如图所示。这是一个环,不过环内只用了一种数字。我们把这个称为鱼环(Fishy Cycle)或者同数环(X-Cycle)。还记得鱼吗?鱼这个技巧就只用同一种数字,所以这个环是想说明它跟鱼一样只用一种数字。

我们再来看一个区块鱼环(Grouped Fishy Cycle),或者叫同数区块环或区块同数环(Grouped X-Cycle)。

如图所示。这个就稍微带了个区块罢了。

双值格环(XY-Cycle)

下面我们再来看一个例子。

如图所示。这是一个双值格环(XY-Cycle),即双值格链的基础上成环,所有强链均发生在同一个单元格内。

其他问题

英文名里我们应该用 Loop 还是 Cycle?

可能你看完了整篇内容会发现一个问题。文章开始那里还在用 loop 来表示环,怎么到这里新补充的两个技巧的技巧名怎么用的是 cycle?这到底应该用哪一个单词?

这个其实说来话长。非要强行概括的话,你可以认为是历史因素。实际上,loop 和 cycle 均可表示环,也都没有问题,甚至还可以用 ring 来表示环。这三个单词在技巧名称上使用均不会造成问题,比如你说 X-Loop 而不是 X-Cycle,也并不会有问题。但是,一般是因为叫某个说法的人多了,所以就约定俗成使用了这个说法。

本来名称这个东西就没有什么对错,你喜欢你叫什么都行。但是,按照学习的角度去看的话,因为更多人叫它 X-Cycle(用 cycle)、XY-Cycle(用 cycle)、Continuous Nice Loop(用 loop),所以我们就采用更多人的叫法。非要说区别的话,你可以认为是不同的人群导致的倾向性。比如三款不同的数独分析软件 HoDoKu、Sudoku Explainer 和 XSudo 里,HoDoKu 用 loop 更多,Sudoku Explainer 用 cycle 更多,而 XSudo 用 ring 更多。

环的尤里卡记法

对于环而言,尤里卡记号并未拥有一个严格的限制,因为强弱链交替的缘故,链尾是可以用弱链连回链头的。

本教程从约定俗成的角度出发,仍然按照链头强链关系起步的逻辑进行描述,直到到最后一个节点时,比正常的链多一个弱链关系表示它连回链头的过程,这样的方式用来区分链和环。例如最开始的例子里,开头是 (8=7)r1c2,最后是 8r1c6-8r1c2,描述了连回链头 r1c2(8) 这个节点。

连续环
删 17 个数的连续环
鱼环
区块鱼环
双值格环