龙空技术网

0012标准数独技巧之同区确定数组法〔五〕

麦或郎 104

前言:

而今同学们对“c语言数独生成”大体比较关切,看官们都想要分析一些“c语言数独生成”的相关文章。那么小编在网络上收集了一些对于“c语言数独生成””的相关资讯,希望小伙伴们能喜欢,兄弟们一起来学习一下吧!

第三节 同区三数组

一、什么是同区三数组

〔一〕同区三数组,也叫三链数,在同区中,三个数和三个格子形成数组。

1、同区是指同行、同列或同宫

2、三个数在九宫标准数独中是指在1到9中的三个数字。

3、三个格是指同区的三个空格。

〔二〕有两种视角

1、格中数:三个格子只有三个数字

2、数中格:三个数字只在三个格子中

〔三〕格中三个数字的情况

1、每一格至少有两个数字:ab、bc、ac

2、每一格最多有三个数字:abc、abc、abc

3、组合方式列举

ab、bc、ac

ab、ac、abc

ab、bc、abc

abc、bc、ac

ab、abc、abc

abc、bc、abc

abc、abc、ac

abc、abc、abc

二、直观视角的同区三数组

〔一〕同宫同行三数组

〔二〕同宫同列三数组

〔三〕同宫不同行列三数组

〔四〕同行不同宫三数组

〔五〕同列不同宫三数组

三、候选数视角的同区三数组

〔一〕显性三数组

1、在某一行、某一列或某一宫中,如果发现有三个格子,仅仅出现了三个不同的候选数,就称为显性三数组。

2、所谓显性,就是三个单元格中,仅仅使用了三个不同的数字,没有包含其他数字,可以明显看到。

3、显性三数组的特点

A三格三数

B格中数:格中只使用这三个数,格中没有其他数字。

C格外数:其他单元格中,可能也包含这三个数。

〔二〕隐性三数组

1、在某一行、某一列或某一宫中,如果发现有三个不同的候选数,仅仅出现在三个单元格中,就称为隐性三数组。

2、所谓隐性,就是三个单元格中,不仅仅有三个不同的候选数,还有其他的数字。换句话说,构成三数组的三个数,隐藏在四个或以上的候选数中,不能够明显地看到。

3、隐性三数组的特点

A三数三格

B数中格:三数只出现在三个单元格中,这三个单元格中可能还包含其他数字。

C数外格:其他单元格中,不包含这三个候选数

D

四、直观法中三数组的形成

〔一〕显性三数组的形成

1显性三数组一般是运用唯余法来生成。

2在同行、同列或同宫内,三格唯余出三个不同的候选数,这三格内的候选数就构成了显性三数组。

3、举例说明

实例一

〔1〕选择三个空白格

寻找三数组最简单的观察方法是三空法。也就是找到只有三个空格的宫、行或列。本例中第八宫B8中只有三个空白格。

〔2〕三格只有三数构成显性三数组

本例中由于只剩下三个空白格,所以一定是显性三数组。

在第八宫中,R7C4、R8C4和R8C6三个单元格中只包含数字589,构成显性三数组,记作:{R7C4,R8C4,R8C6}(589)

〔3〕再举例,选择三个空白格

选择这三个单元格:R5C1、R7C1和R8C1

〔4〕利用余数法计算每格的候选数

特别看R8C1格。

本例中,第八宫存在三数组{R7C4,R8C4,R8C6}(589),数字8必在其中,也就是说R8C4和R8C6中必然包含数字8。

根据数独规则,每一行中不允许有重复的数字,所以R8C4和R8C6所在行R8中的其他位置不能有数字8。

这样,就可以删除在R8行中的单元格R8C1中的候选数8。

综上所述,R8C1=259

〔6〕三格只有三数构成显性三数组

R5C1、R7C1和R8C1这三个单元格中只包含三个候选数259,没有其他数字,所以构成显性三数组,记作:{R5C1,R7C1,R8C1}(259)

可以简写为{R5C1,R78C1}(259)

〔7〕特别说明

A三个单元格的选取是不容易的。

B可以先用三空法找到一个三数组,然后再利用这个三数组去构建另外一个三数组

C与直观法相比,候选数法相对更容易观察,所以,三数组法常常在全标候选数中使用。

〔二〕隐性三数组的形成

1隐性三数组一般是运用唯余法来生成。

2在同行、同列或同宫内,利用三个数字进行排除后,得到的三个数字只占用三个格子,就构成了隐性数对。

3、举例说明

〔1〕选择三个数字

面对一个盘面,打底应该选择哪三个数字?这是不容易的。

本例中选择789这三个数字

〔2〕对某个区域作排除

利用数字789对第一宫B1作排除。

〔3〕三数只能填入三格构成隐性三数组

将数字789填入R2C1、R2C2和R3C2三个空格中。

到底是不是隐性数组,要通过全标候选数来判定。

全标候选数。

很容易看到,在这三个单元格中,还有其他候选数,所以是隐性三数组。

〔4〕特别说明

A通过直观法所得到的三数组,可能是显性三数组,也可能是隐性三数组。到底是不是隐性数组,要通过全标候选数来判定。

B在用直观法做题中,不必在乎是显性数组还是隐性数组,这对于解题没有什么影响。

C要找到三个数字,这是很难的,所以,三数组法常常在候选数法中使用。

五、三数组的应用

〔一〕单独用法

1、显性三数组占位法

〔1〕解法说明:在某行,某列或某宫中,如果有三个单元格都包含且只包含三个候选数中的两个或三个,则这三个数字不能再出现在该行,该列或该宫的其他单元格中。

〔2〕三个单元格被这三个数字占用了,同区内的其他单元格内就不能有这三个数字了

〔3〕占位示意图

2、显性三数组区块排除法。

〔1〕解法说明:在显性三数组中,如果某行或者某列中,相同的候选数存在2个或者3个,那么,就会构成这个数字的区块,所以可以运用区块排除法。

〔2〕示意图

示意图中只列出了2个相同数a,也可以是3个,但是,至少是2个。

排除的数字是a

3、隐性三数组占位法

原理同显性三数组占位法,这里不再叙述。

4、隐性三数组区块排除法。

原理同显性三数组区块排除法,这里不再叙述。

5、候选显性三数组删数法

〔1〕解法说明:在某行,某列或某宫中,如果有三个单元格都包含且只包含三个候选数中的两个或三个,则这三个数字不能再出现在该行,该列或该宫的其他单元格的候选数中。

〔2〕示意图

6、候选显性三数组区块删数法

7、候选隐性三数组删数法

解法说明:某三个数只出现在某行,某列或某宫的三个单元格中,且每一个单元格内包含这三个数中的两个或三个,则可以将其他数字从这三个单元格的候选数中删除。剔除候选数后数会变成显性数组,我们就可以用显性数组法继续做题。

8、候选隐性三数组区块删数法

原理同候选显性三数组区块排除法,这里不再叙述。

〔二〕组合用法

1、特别说明:

〔1〕三数组法不能直接出数,只能作为辅助方法。

〔2〕三数组法结合其他方法就可以出数。

〔3〕这里的三数组不作显性和隐性的区分,因为隐性数组删除候选数后也会转化成显性数组,因此,这里的数组都是显性的。

2、三数组+唯余法

实例三

〔1〕构建三数组

第六宫存在三数组:{R56C7,R5C9}(126)

〔2〕选择某个单元格进行点算

本例选择格R4C7

R4C7所在行出现的数字:4

R4C7所在列出现的数字:34579

R4C7所在宫存在三数组:126

没有出现的数字:8

〔3〕唯一候选数填入唯一格

R4C7=8

3、三数组+排除法

〔1〕构建三数组

在这里直接引用上一个例子

〔2〕用某个数字对某宫作排除

利用数字2对第四宫作排除

需要注意的是,这里用到了数组区块排除法

〔3〕将数字填入唯一空格中

R4C3=2

本节实例答案

实例一:初盘

实例一:终盘

实例二:初盘

实例二:终盘

实例三:初盘

实例三:终盘

标签: #c语言数独生成