前言:
而今同学们对“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语言数独生成