数独的逻辑:数独算法从入门到精通
上QQ阅读APP看书,第一时间看更新

1.3 数独中的排列组合

其实数独中的排列组合实例不胜枚举。这里仅举数例。其他一些实例分散在数独中的求解,设计和特性的章节中,请读者随时注意。

例1,大列首块一横条的错开(参看4.1.1.2节的模式法):欲使大列首块一横条321三字在中块内错开有几种方式?

错开乃是数独设计的精髓。数独大列首块一横条上三字如何在中块内错开,按数独的八个标本(见4.1.1.4)有两方式,一是三字分配到中块的横条的三格内,一格一字,这叫散开式。比如图1-12(a)。二是三字分配到中块的两格内,其中有一格两字龟缩到一起,这叫龟缩式,如图1-12(b)所示。

图1-12 散开式(a)与龟缩式(b)

欲求首块一横条三字如何在中块按散开式错开,须引用排列组合中的守位离位概念。横条三字321如原封不动叫守位,如果任一数字离开了原位叫离位。根据三字的守位离位情况即可摘出三字的两个错开方式。横条321三字有6个排列(=3×2×1=6),其成果表(排队列表法)如图1-13所示。

图1-13 三字守位与三字离位

其中只有0字守位才是对321的错开:

也可以运用以下思路得到上述结果(见图1-14)。

图1-14 三字的散开式

再借以上的交叉线图即得321之两种错开方式:

故三字横条的散开式两错开方式可规范化如下(见图1-15)。

图1-15 横条三字之错开方式

由此图可见3个1、3个2、3个3彻底错开。

以上单条在中块内的错开方法,可以推广到大列首块的三竖条如何在中块内、末块内错开(见图1-16)。

图1-16 三竖条之错开方式

结果为3个147条、3个258条、3个369条得到彻底的错开。

以上由首块单横条三字在大列中的错开,之所以可以推广到首块三竖条,乃是三横条每横条三字错开叠加的必然结果,见图1-17。

图1-17 三竖条的错开是三横条三字错开的叠加

例2,一井块有多少个排列?设首块由九字(1、2、3、…、9)之321、654、987三条组成,如将三条条序打乱,再将每条的字序打乱,问可得多少个条序排列?多少个字序排列?

条序排列

今将321、654、987三条分别简称为①②③三条,如将三条条序打乱所得条序排列可用公式求之。由此可得以下=3×2×1=6个(条序排列)。

字序排列

每一井块有九格,每格填入九字之一,即九格填入九字,问共有多少字序排列?

#1格内可填入九字之任一故有9方式;

#2格内可填入其余八字之任一故有8方式;

#3格内可填入其余七字之任一故有7方式;

#4格内可填入其余六字之任一故有6方式;

#5格内可填入其余五字之任一故有5方式;

#6格内可填入其余四字之任一故有4方式;

#7格内可填入其余三字之任一故有3方式;

#8格内可填入其余两字之一故有2方式;

#9格内可填入其余一字故只有1方式。

按a×b×c法则,今每件事各含9个成分,完成第一成分有9种方式,完成第二成分有8种方式……完成第九成分有1种方式,则完成九个成分共有9×8×7×6×5×4×3×2×1=362880个(方式)。

上式各因子不可颠倒,故答数为排列数(字序排列数),故一个井块可有362880个字序排列。

例3,一井块有多少个三条组合三条组合是指一个大列井块由三横条组成,各横条乃是由9字取3的一个组合,故三横条乃是三个组合之组合,叫作三条组合。三条组合是区别数独井块异同的标志。一个3条组合可繁殖出1296个字序排列来。故一井块的362880个字序排列是由280个三条组合繁殖出来的。本书星符后附有数字如*1者,表示欲深入究其由来,可参看附录的注释*1,余仿此。1

据例2,已知一数独任何一个井块中恒有362880个字序排列,欲得出一个井块有多少个三条组合,务必求出一个三条组合能繁殖出多少个条序排列,又每个条序排列能繁殖出多少个字序排列来。因此下面分三个层次即三条组合、条序排列和字序排列三个层次予以图解。

设有一个三条组合如下(条序不拘、字序不拘)(见图1-18)。

图1-18 一个三条组合可得1296个字序排列

由以上图解可以看出井块的任一个三条组合可得出6个条序排列,而每个条序排列又可得出216(6×6×6)个字序排列来,故一个三条组合可得出6×(6×6×6)=1296个字序排列来。一井块共有362880个字序排列(见1.3节例2“字序排列总数”),那么362880个字序排列是由多少个三条组合得来的呢?这是一个算术中的简单除法,故:

这说明尽管数独五花八门,井块多达362880个,但最后均可归纳为280个三条组合,任何一个井块都逃不出这280个三条组合范围。作者已经得出这280个三条组合的明细表,读者可参阅本书中的附录一。

例4,模式的216个变种。

模式是指大列的上中下三正交条,每条三字如何在中块内分布开来。模式发生于前后两块间,当前块的上中下三正交条定下来后,再对三正交条选定任一模式并在后块中标示出有关的三个标本来,但在整理后块时允许每个标本的三字沿平行向任意滑移,每一模式可演变出216个变种来,其来由如图1-19所示。

图1-19216个变种之一

后块每竖条有三字(三成分),三字有=3×2×1=6个字序排列。如果三竖条每条取字序排列,则左中右三竖条的交叉线图如图1-20所示。

图1-20 释216个变种之由来

因此,216个变种中任一变种都算是模式 [327]。比如:

例5,用避己法求中块的右条。

数独的一种错开方法叫避己法。比如从大列首块的左中两竖条,左条任取一字,中条任取二字,合成三字作为中块的右条,问可有多少方式?

图1-21 中块右条三字由来

由中块右条三字=首块左条一字+首块中条二字,可知中块右条含两成分:即首块左条一字和首块中条二字。

完成第一成分有3方式,因为首块左条有3字,每取1字有种方式。

完成第二成分也有3方式,因为首块中条有3字,每取2字有种方式。

故同时完成二成分,依a×b×c法则,计有=3×3=9种方式,这9个方式如图1-22所示。

图1-22 首块左条取一中条取二之组合

于是得出以下九个中块不同的右条(首块左条取一、中条取二时之中块右条,见图1-23)。

图1-23 首块左条取一、中条取二所得之中块右条

以上所得中块的九个右条是根据首块左条一字加首块中条二字而得,倘若根据首块左条二字加首块中条一字还可得中块的右条九条,共计得图1-24所示的18个中块右条。

图1-24 中块各小列所得的18个组合

仿此,可得出中块的18个左竖条和18个中竖条来,如图1-24所示。这就是附录四中注释*4所得的附图4-13的由来。

例6,理顺的实例

在数独的大列(或大行)中,使平行向上同行异字或同字异行就是错开。凡遇到同小列(小行)有同字的情况便叫作重复,理顺就是要消除重复的问题。理顺有一条总则:横向理顺,靠竖条内易序;竖向理顺,靠横条内易序。易序即是重新排列的意思。

现举一例,设已有一大列,三块每三竖条都沿小列发生重复,试问如何才能理顺?

[解一] 把原大列照抄下来,欲使三块相互错开,并不是把每块九字全部打乱进行九字排列,这是大包围,不如使用小包围,将每横条三字打乱进行三字排列,得图1-25。

图1-25 大列各横条的6个字序排列

各横条的三字排列有=3×2×1=6个。设大列首块之上中下三横条为,为保证首块每横条在三块内错开,从首中末三块内取出同成分异字序,比如首块的在首中末三块内分别取;首块的654在首中末三块内分别取;首块的在首中末三块内分别取。结果如图1-26所示。

图1-26 理顺后的大列

首中末三块相互错开,即理顺了。此理顺归功于排列组合的有效运用。

[解二] 为了机动地圈选出一个多成分组合的各个字序排列来,作者特设计出一个“滚环法”来。什么是滚环法?

假设你有一个3字组合,想要把它的6个(=3×2×1)排列通通圈选出来,你可将此三字组合连写成3组,每一组配上一个环,每一轮、每环套上一个字,3个环套上3个不同字,待6轮套完即得出6个不同排列来。

连写三组这就是为何原大列或原大行需沿正交向扩为三倍,即扩为三大列或三大行的原因。见附录四注释*7中“正交扩三同”。: 321321321

每组各配一环:321321321

每一轮用一环圈上一个字:3②1 32① ③21

如此则得213一个排列。

六轮后乃得出六个排列,如表1-1所示。

表1-1 滚环法得出6个排列

这样便把6个排列,一个不漏地圈选出来。

已知大列有三井块,欲竖向理顺,必须对各横条做条内易序即圈选出同小行中的异字来。为此须将原大列照抄下来,并将它横向扩为三倍,得九个井块(见图1-27)。为保证同行异字,圈选时必须圈选九组三同字来,且每组三同字务必圈自:

三个不同的井块,

三个不同的大列,

三个不同的大行。

图1-27 滚环法所得的理顺大列

于是得出三块相互错开的大列来。

滚环法(又名局部圈选清单法),是求排列组合的一种方法,这再一次说明了数独需要排列组合的相关知识。

[解三] 此法根本不用顾及大列中末块排列的存在,先由首块采用避己法或模式法求得中块,再用补差求得末块。以所得出的中、末块取代原有的中、末块(见图1-28)。

图1-28 用模块模式加补差所得理顺大列

解三运用了模块法(即避己法),而避己法的第一步骤则是排列组合的应用,故解三仍是用排列组合进行理顺的。