第 67 講:網(wǎng)的基本概念
歡迎進(jìn)入本文檔里的最難的一部分:網(wǎng)(Multi-sector Locked Set,簡(jiǎn)稱MSLS)。
Part 1?我們從SDC說(shuō)起
先來(lái)看看SDC基礎(chǔ)版是什么樣的。
1-1?度SDC
我們可以從之前的SDC的講解里看到,SDC是一種由兩個(gè)區(qū)域構(gòu)成的整體跨區(qū)的數(shù)組結(jié)構(gòu)。那么SDC能否拓展到涉及更多個(gè)區(qū)域呢?

如圖所示,我們觀察這個(gè)結(jié)構(gòu),它涉及了三個(gè)區(qū)域:r5、c8和b6,一共涉及r5c289、r24c8和r4c9這六個(gè)單元格和六種不同的候選數(shù)4、5、6、7、8、9。
首先我們對(duì)這樣六個(gè)單元格按照所屬區(qū)域涂上顏色:我們發(fā)現(xiàn)六格之中,4和5只出現(xiàn)于同一列上,所以我們暫用綠色標(biāo)注;6和8只出現(xiàn)于同一行上,所以我們暫用橙色標(biāo)注;7和9則只出現(xiàn)于宮內(nèi),所以圖上紫色。
此時(shí)我們會(huì)發(fā)現(xiàn),六格有六種不同的候選數(shù),并且每一種候選數(shù)都不會(huì)跨區(qū)域出現(xiàn)。所以,我們可以這樣思考這個(gè)問(wèn)題:結(jié)構(gòu)在b5內(nèi),有多個(gè)涂色的單元格一共有三個(gè):r4c8和r5c89。因?yàn)樯戏降膔2c8只有候選數(shù)4和5,所以還需要一格,候選數(shù)也只有4和5,才可以不出現(xiàn)矛盾(如果三格只有4和5則無(wú)法填滿三格;如果只有一格有4和5,則4和5在c8上總有其中一格數(shù)不會(huì)出現(xiàn),于是矛盾)。于是r45c8其中一格只能有候選數(shù)4和5;同理,r5c2因?yàn)橹挥泻蜻x數(shù)6和8,所以需要且僅需要一格只有候選數(shù)6和8,才不會(huì)出現(xiàn)矛盾。所以r5c89其中一格只能有候選數(shù)6和8。再觀察b6,結(jié)構(gòu)涉及于b6內(nèi)還有一格只有候選數(shù)7和9,那么還需要且僅需要一格只有7和9才不會(huì)出現(xiàn)矛盾。
這樣一來(lái),r4c8和r5c89這三格有一格只有7和9、有一格只有6和8、有一格只有4和5。這樣剛好用完這三格,所以這樣看來(lái),c8總會(huì)出現(xiàn)45數(shù)對(duì)、r5總會(huì)出現(xiàn)68數(shù)對(duì)、b6總會(huì)出現(xiàn)79數(shù)對(duì),于是刪除c8、r5、b6其余位置各自出現(xiàn)的數(shù)對(duì)而得到的刪數(shù),圖中紅色的均為刪數(shù)。
這樣的結(jié)構(gòu)就是SDC的拓展,把原本涉及的兩個(gè)區(qū)域變?yōu)樯婕傲巳齻€(gè)區(qū)域,所以稱為三區(qū)域分布式跨區(qū)數(shù)組(Three-sector DDS),另也可以直接叫作二度SDC(SDC Degree 2)。注意,結(jié)構(gòu)涉及n個(gè)區(qū)域,則稱為“(n-1)度SDC”。最基本的SDC也可以被稱為一度SDC(SDC Degree 1),千萬(wàn)不要搞錯(cuò)了名字。
可以看到,這樣的結(jié)構(gòu)最多只能到達(dá)二度,因?yàn)楸P(pán)面只可能出現(xiàn)行、列、宮三種區(qū)域類型,所以不可能出現(xiàn)第四個(gè)維度,使得結(jié)構(gòu)變?yōu)槿鹊摹?/p>
1-2?段SDC/多米諾鏈
除了這樣從涉及區(qū)域來(lái)拓展結(jié)構(gòu)的,還可以直接將推導(dǎo)情況接起來(lái)形成鏈條形式。

如圖所示,我們從r5c468起推。r5c46其中一格只能有6和8,和r5c8(68)構(gòu)成68數(shù)對(duì)(r5c46都沒(méi)有6和8和都只有6和8都是矛盾的,這一點(diǎn)和上面的思路是一致的,這里就不闡述了)。因?yàn)閞5c46其中一格只有6和8,所以另一格就不會(huì)有6和8、只有4和5。此時(shí)r46c5其中一格也只能有4和5,構(gòu)成45數(shù)對(duì);而r46c5其中一格只有4和5,所以另外一格則只有6和7,此時(shí)和r7c5形成67數(shù)對(duì)。所以推導(dǎo)過(guò)程可以得到r5形成68數(shù)對(duì)、b5形成45數(shù)對(duì)、c5形成67數(shù)對(duì),于是其余單元格對(duì)應(yīng)數(shù)對(duì)的刪數(shù)就都可以刪除了。
這個(gè)結(jié)構(gòu)和剛才的結(jié)構(gòu)不太一樣的地方是,多度SDC(多區(qū)域分布式跨區(qū)數(shù)組)是“發(fā)散形”的,而這個(gè)結(jié)構(gòu)則是“鏈條形”的。所以這個(gè)結(jié)構(gòu)也可以看作多段不同的待定數(shù)組共同構(gòu)成的結(jié)構(gòu),并稱為多段SDC或多米諾鏈(Domino Chain),是不是很像多米諾骨牌那樣一個(gè)一個(gè)順次倒下的感覺(jué)呢?另外,上圖由三段構(gòu)成,所以是三段SDC。

如圖所示,c7之中有兩格只有候選數(shù)4、8、9,則還需要一個(gè)單元格只有候選數(shù)4、8、9才不會(huì)出現(xiàn)矛盾;發(fā)現(xiàn)r45c7其一是4、8、9就可以,于是r45c7另外一格只有候選數(shù)2和5,于是還需要恰好一格只有候選數(shù)2和5才不會(huì)出現(xiàn)矛盾,此時(shí)發(fā)現(xiàn)r6c89其中一格只有2和5就可以,于是另外一格則只有候選數(shù)6和8,此時(shí)需要r6c23其中一格只有候選數(shù)6和8才不會(huì)矛盾;r6c23其中一格只有候選數(shù)6和8,所以另外一格則只有候選數(shù)2、4、5,于是和b4內(nèi)只有候選數(shù)2、4、5、7的r4c1、r5c13三格共同構(gòu)成2457四數(shù)組。
所以總的來(lái)說(shuō),c7總會(huì)出現(xiàn)489三數(shù)組、b6總會(huì)出現(xiàn)25數(shù)對(duì)、r6總會(huì)出現(xiàn)68數(shù)對(duì)、b4總會(huì)出現(xiàn)2457四數(shù)組。所以各自對(duì)應(yīng)的區(qū)域下的數(shù)組的刪數(shù)就都可以刪除掉了。
這個(gè)結(jié)構(gòu)在推導(dǎo)時(shí)被分為四個(gè)部分,所以稱為四段SDC。
那么,這里再來(lái)一個(gè)練習(xí),請(qǐng)自行觀察。這個(gè)結(jié)構(gòu)有些復(fù)雜——六段SDC。

大致的推導(dǎo)過(guò)程是從r3、b2、c5、b8、r7、b7的順序推導(dǎo)的哦!就提示到這里了!當(dāng)然了,從推導(dǎo)過(guò)程之中,你也可以發(fā)現(xiàn),多段SDC的推導(dǎo)是不論方向的,所以倒著推導(dǎo)也是可以的。
它非常像是鏈,但和鏈不同的是,鏈如果不首尾拼接形成環(huán)的話,是無(wú)法刪除那么多數(shù)字的,而多段SDC雖然很像是鏈的形式順次推導(dǎo),但是它在不封閉的情況下也是可以刪除很多數(shù)字的哦。那么,多段SDC封閉起來(lái)構(gòu)成環(huán)路會(huì)怎么樣呢?
1-3?科爾扎斯環(huán)/多米諾環(huán)

如圖所示,我們只看綠色的單元格。我們這么去想,任找一點(diǎn),比如r2c13,不妨假設(shè)其中一格只有候選數(shù)68,則r2c79其中一格只有候選數(shù)6和8,構(gòu)成68數(shù)對(duì),而另一格則只有1和5,與r13c8構(gòu)成15數(shù)對(duì),另外一格則是68,和r79c8其中一格形成68數(shù)對(duì),另外一格則只有29,和r8c79其中一格構(gòu)成29數(shù)對(duì),而r8c79另外一格則只有候選數(shù)4和6,則會(huì)和r8c13其中一格構(gòu)成46數(shù)對(duì),則另外一格是15,會(huì)和r79c2其中一格構(gòu)成15數(shù)對(duì),另外一格則只有候選數(shù)6和8,會(huì)和r13c2其中一格構(gòu)成68數(shù)對(duì),而另外一格則只有候選數(shù)2和9,會(huì)和r2c13其中一格構(gòu)成29數(shù)對(duì)。而最開(kāi)始r2c13假設(shè)的其中一格是候選數(shù)6和8,那另外一格必然肯定只有候選數(shù)2和9了。
這樣一來(lái)就會(huì)構(gòu)成涉及r28c28b1379八個(gè)區(qū)域的環(huán)形八段SDC,且各自區(qū)域上恰會(huì)構(gòu)成一個(gè)簡(jiǎn)單的數(shù)對(duì)。這樣的結(jié)構(gòu)是多米諾鏈的環(huán)形版本,所以直接可以成為多米諾環(huán)(Domino Loop,簡(jiǎn)稱DL),或稱為柯?tīng)栐弓h(huán)(SK Loop,簡(jiǎn)稱SK環(huán))。
結(jié)構(gòu)是由一位叫Stephen Kurzhals的人發(fā)現(xiàn)的技巧,所以為了紀(jì)念他,采用了他的名字直接稱呼這樣的環(huán),即S.K. Loop。
另外,我們可以對(duì)這樣的多段SDC的推導(dǎo)過(guò)程利用數(shù)學(xué)符號(hào)的方式簡(jiǎn)寫(xiě),而不是用上面復(fù)雜的文本描述。
另外,多米諾環(huán)還有一個(gè)示例。

它的表述如下。
Part 2?MSLS的定義和使用
我們正式進(jìn)入網(wǎng)的學(xué)習(xí)。不過(guò)首先,我要拿出一個(gè)大家基本上都熟悉的例子:被網(wǎng)上“戲稱為”世界最難題的數(shù)獨(dú)題目。
2-1 MSLS的定義

這個(gè)題把它的全部候選數(shù)都標(biāo)注上去的話,就是這樣的,不過(guò)這個(gè)題目,在前面學(xué)習(xí)到的技巧之中,是無(wú)法解決掉的,也包括飛魚(yú)導(dǎo)彈(或者我自己沒(méi)找到)。
不賣關(guān)子了,接下來(lái)我們直接來(lái)看這個(gè)例子用什么網(wǎng)怎么操作。
首先我們標(biāo)記出來(lái)一系列單元格,如下圖所示。

這樣我們就標(biāo)注了20個(gè)單元格。我們之前學(xué)到的SDC的拓展,不論是多段SDC還是多度SDC,最終在結(jié)構(gòu)內(nèi)的所有候選數(shù),沒(méi)有任意一個(gè)候選數(shù)同時(shí)屬于兩個(gè)或更多區(qū)域。換句話說(shuō),之前的所有候選數(shù),都有自己對(duì)應(yīng)的明確的涂色的,而不會(huì)同時(shí)因?yàn)閷儆趦蓚€(gè)或更多區(qū)域時(shí),同時(shí)圖上不同的顏色。
這里我們來(lái)看這20個(gè)單元格的所有候選數(shù),這些候選數(shù)能不能像之前那些SDC那樣,每一個(gè)候選數(shù)都可以明確地找到自己所屬的區(qū)域呢?
好消息是,全部都可以。比如這樣:

如圖所示,標(biāo)注在盤(pán)面外的數(shù)字,表示所在行(列)上,一定存在于此區(qū)域的候選數(shù)。比如說(shuō)r1外圍的1、3、6,表示這一行內(nèi),結(jié)構(gòu)涉及的單元格內(nèi),候選數(shù)1、3、6恰只屬于此行內(nèi)。
那怎么去選擇每一個(gè)候選數(shù)的所在區(qū)域呢?比如r1c5(7),因?yàn)樾猩现挥形ㄒ灰粋€(gè)單元格可能有7的填數(shù)位置,按照SDC拓展版本那樣,如果一個(gè)區(qū)域下只有唯一一處有這個(gè)數(shù),就完全無(wú)法構(gòu)成合適的結(jié)構(gòu)。所以這樣看是不行的,換而言之,只能將候選數(shù)安排到列上。
然后,數(shù)一下外圍的數(shù)字的個(gè)數(shù)。結(jié)構(gòu)涉及五行,一共是3 + 2 + 2 + 1 + 2 = 10個(gè)數(shù);又涉及四列,一共是2 + 3 + 3 + 2 = 10個(gè)數(shù),所以結(jié)構(gòu)整體一共涉及的是20個(gè)數(shù)。而恰好又是20個(gè)單元格。我們就可以下結(jié)論:這些外圍的數(shù)字表示所在行(列)上,一定會(huì)出現(xiàn)這些數(shù)字。所以所在行(列)上,可以對(duì)應(yīng)刪除掉其他位置的候選數(shù)。如圖所示,紅色的均為刪數(shù)。

結(jié)論是成立的,而且紅色的刪數(shù)是可以保證正確性的,我們可以安全刪除掉它們。比如剛才我們確定了r8上有3和6,所以r8結(jié)構(gòu)涉及的區(qū)域單元格的候選數(shù)3和6均可以被刪除。
那,又是為什么可以這么確定刪數(shù)呢?外圍的數(shù)字又是個(gè)什么意思呢?
2-2 MSLS的原理
下面我們用簡(jiǎn)單的幾句話闡述一下它到底為什么成立。
我們利用魚(yú)的刪數(shù)原理思路可以進(jìn)一步地推廣,換句話說(shuō),魚(yú)只會(huì)涉及行、列、宮,因?yàn)轸~(yú)只能是同數(shù)的;而網(wǎng)涉及不同數(shù)字,所以還會(huì)比魚(yú)多出一種衡量區(qū)域:?jiǎn)卧瘛?/p>
我們這么去想這個(gè)問(wèn)題。我們嘗試把外圍的數(shù)字看作“廣義的刪除域”,而把單元格看作“廣義的定義域”。定義域意味著,每一個(gè)定義域下只可能有且僅有唯一一個(gè)正確的數(shù);刪除域意味著,每一個(gè)刪除域下最多都只能有一個(gè)正確的數(shù)。那么20個(gè)單元格都被看作定義域的話,就有20個(gè)定義域,即恰有20個(gè)數(shù)字正確;而我們把外圍的數(shù)字,挨個(gè)在所在區(qū)域上算作對(duì)應(yīng)的刪除域區(qū)域的話,也會(huì)有20個(gè)刪除域。刪除域下數(shù)字最多只有一個(gè)正確的,比如說(shuō),我們把r1上涉及的三個(gè)刪除域區(qū)域r1(1)、r1(3)和r1(6)都寫(xiě)出來(lái),這就表示r1上最多只有一個(gè)位置是1、最多一個(gè)位置是3、最多一個(gè)位置是6。
而20個(gè)刪除域區(qū)域就意味著,最多有20個(gè)數(shù)填入結(jié)構(gòu)之中,而定義域保證,結(jié)構(gòu)恰有20個(gè)數(shù)。所以這么一來(lái),就沒(méi)有多出來(lái)的數(shù)了。換句話說(shuō),這些數(shù)最終都是全部會(huì)填入到結(jié)構(gòu)之中的。所以,刪除域下的數(shù)字(所在區(qū)域的其余候選數(shù))均可刪除。
這下知道為什么網(wǎng)的英文名的直譯是“多區(qū)域(跨區(qū))數(shù)組”了吧。因?yàn)樗慕Y(jié)構(gòu)不同于SDC的拓展,
另外再提及一些術(shù)語(yǔ)。
定義單元格(簡(jiǎn)稱定義格,Defining Cells):即結(jié)構(gòu)涉及的單元格,每一個(gè)單元格都稱為一個(gè)定義格。即定義網(wǎng)結(jié)構(gòu)的單元格。也稱為網(wǎng)定義域(Defining Sets For MSLS)。
鏈接點(diǎn)(Link):比如上述示例之中,標(biāo)注在盤(pán)面外的數(shù)字。位于行上的,稱為行鏈接點(diǎn)(Row Link),位于列上的,稱為列鏈接點(diǎn)(Column Link),當(dāng)然也存在宮鏈接點(diǎn)(Block Link)。
網(wǎng)定義域(Defining Sets For MSLS):同定義格。
網(wǎng)刪除域(Secondary Sets For MSLS):鏈接點(diǎn)所在的所有區(qū)域,稱為網(wǎng)刪除域。
2-3?小練習(xí)
下面我將會(huì)給出一個(gè)題目,這個(gè)題目里存在一共3個(gè)不完全相同的網(wǎng)結(jié)構(gòu)(當(dāng)然網(wǎng)結(jié)構(gòu)的位置不同,刪數(shù)就不一定完全一致了)。我會(huì)給出其中的一個(gè)網(wǎng),并且給出對(duì)應(yīng)的刪數(shù)在那里,以及所有提供提示的涂色信息,而剩下的兩個(gè)網(wǎng)里,一個(gè)我只給出刪數(shù)和定義單元格的位置,但不給出鏈接點(diǎn)的分配情況的涂色信息;而還有一個(gè)僅僅給出定義單元格的位置,不給出涂色信息和刪數(shù),希望你能夠獨(dú)立通過(guò)前文的描述完成推理。

這是第一個(gè)網(wǎng)結(jié)構(gòu),看起來(lái)好像要補(bǔ)充r1c1才能算是完整的4 * 5的結(jié)構(gòu),但這個(gè)例子里由于r1c1被提示數(shù)9占據(jù)了,所以不能算上它,而剩下的部分恰好滿足19個(gè)單元格和19個(gè)鏈接點(diǎn)的分配,而且同樣滿足了全覆蓋的要求,所以網(wǎng)是成立的。

這個(gè)網(wǎng)的示例里只有16個(gè)單元格,但依舊構(gòu)成了網(wǎng),希望你能找到鏈接點(diǎn)的情況。

最后是同樣這個(gè)題目的第三個(gè)網(wǎng)結(jié)構(gòu)。
那么,下一節(jié)我們將繼續(xù)講解,網(wǎng)結(jié)構(gòu)的復(fù)雜變體類型。