第 45 講:構(gòu)造鏈與構(gòu)造結(jié)構(gòu)
這一節(jié)我們將學(xué)習(xí)到更奇特的使用,構(gòu)造(Construct)。鏈的構(gòu)造不僅僅是一種解題技巧,更是一種觀察技巧,它不僅使得我們做題更加有邏輯性,而且還能更快地讓我們觀察到一些特殊的結(jié)構(gòu),并加以使用到鏈之中。但是內(nèi)容有趣且具有挑戰(zhàn)性。
Part 1?什么是構(gòu)造?
構(gòu)造是一種思想,以某一種技巧作為框架,使得我們尋找的結(jié)構(gòu)基于框架而產(chǎn)生不同的變體形式。比如W-Wing,我們可以在W-Wing里嵌入?yún)^(qū)塊節(jié)點,也可以使得W-Wing的兩頭強關(guān)系從雙值格改為ALS區(qū)域的強關(guān)系。這樣風(fēng)格的內(nèi)容基于原技巧,而不同于原技巧,這便是構(gòu)造,例如我們之前實際上已經(jīng)學(xué)到過一些技巧,比如ALS-W-Wing,這便是W-Wing的構(gòu)造版本;我們還學(xué)過死亡綻放,它便是ALS版本的Wing邏輯。
接下來我們要講到的就是基于該原則產(chǎn)生的不同構(gòu)造邏輯。但能夠為了產(chǎn)生豐富的解題思路,我們必須得先重新學(xué)習(xí)一些我們以前學(xué)過的技巧,重新學(xué)習(xí)它們的新用途。
Part 2?基于致命結(jié)構(gòu)的構(gòu)造
我們先來學(xué)習(xí)一些基本的技巧的構(gòu)造。
對,你沒有看錯,構(gòu)造這個詞語實際上并沒有對應(yīng)的技巧名稱,而是直接在原技巧名后尾隨一個加號“+”來表示構(gòu)造的技巧。比如下面的這些。
2-1?UR + XY-Wing

如圖所示,首先我們可以知道,如果r13c7的5和6同假時,就會出現(xiàn)1和2的UR致命形式,所以不同假。所以r1c7(5)和r3c7(6)至少一真:如果r1c7(5)為真,則r6c7=1;而如果r3c7(6)為真,則r3c8 = 1。
因為兩者至少一個為真,也就意味著r6c7和r3c8至少一個是1。所以刪掉它們的交集,即{r13c7, r6c8}(1)。
由于結(jié)構(gòu)里嵌套了XY-Wing的分支邏輯,所以稱為UR + XY-Wing。
2-2?UR + XYZ-Wing

如圖所示,我們把r5c89的額外的數(shù)字分三種情況討論:1、2、7。雖然7有兩個,但是我們依舊可以按照區(qū)塊的形式來討論。顯然,同假時會導(dǎo)致UR出現(xiàn)致命形式,所以必須得有額外的情況成立。所以我們挨個討論一遍。
假設(shè)1是對的,那么我們可以得到r5c2 = 8;
假設(shè)2是對的,那么我們可以得到r2c9 = 8;
假設(shè)7是對的,不論哪個7正確,都可以得到r5c1 = 8。
所以,不論如何我們都可以得到的是,r5c12和r2c9里必須有至少一個8出現(xiàn)。所以r5c9,即它們的交集,不能出現(xiàn)8,于是刪除掉它。
這個結(jié)構(gòu)稱為UR + XYZ-Wing。
再給大家看一個+WXYZ-Wing的例子。

邏輯希望你能自己看。
2-3?UR + SDC

如圖所示,我們發(fā)現(xiàn)如果r2c23(67)均為假的話,就會出現(xiàn)UR致命形式。而同真的話,就是6、7數(shù)對,r2c46沒有了6和7,b2內(nèi)2、3、5的位置要填四格,所以不夠。所以,r2c23只有一格只有{67},另外一格則為{24}。這樣一來,就會和r2c46其中一格構(gòu)成6、7數(shù)對,剩下一格則和r13c5構(gòu)成2、3、5的三數(shù)組。所以,刪除掉b2內(nèi)其余位置的2、3、5,刪除掉r2其余位置的6、7。
這個結(jié)構(gòu)則是UR帶了個SDC,所以我們稱為UR + SDC。
Part 3?基于鏈的構(gòu)造
3-1?鏈的構(gòu)造原理
思考一下,一般鏈的頭和尾都會有什么關(guān)系。顯然,鏈頭和鏈尾至少有一個成立,這是鏈的原則,但實際上,我們可以立馬考慮到的是,既然是至少有一個成立,換個說法也就是不同假,那不就是強關(guān)系?是的。所以我們可以把一條鏈縮寫為一個強關(guān)系,縮寫的原則就是首尾不同假(即原來的說法“至少有一個節(jié)點成立”)。所以我們?yōu)槭孜伯嫵鰪婈P(guān)系即可,我們先來看一則示例來理解這一點。

如圖所示,我們可以看到這是一個很普通的鏈,但沒有刪數(shù),因為鏈的頭尾對應(yīng)到的是r4c123,但不巧的是,這幾個單元格都沒有6。
不過沒關(guān)系,我們可以知道的是,鏈如果是成立的,那么的頭尾是為強關(guān)系的,那么我們僅需要一個強關(guān)系,便得到如下的情況:

可以看到,這個鏈僅長度為3,其中的第一個強關(guān)系產(chǎn)生于剛才我們得到的鏈。所以實際上,這條鏈的頭尾的交集現(xiàn)在就已經(jīng)有了:r2c3(6),所以r2c3 <> 6。
這就稱為鏈的構(gòu)造(或構(gòu)造鏈,Construct of AIC,記作AIC+)。
但是,好像這樣僅僅是簡化了鏈而已(甚至是沒有簡化,反而增大了邏輯的復(fù)雜度,因為一條鏈被拆成了兩條),并沒有產(chǎn)生任何實質(zhì)性的效果。這你就錯了,因為構(gòu)造鏈并不像看起來這么簡單。
實際上,我們在尋找鏈的時候,經(jīng)常碰到類似于第一個圖上那樣的情況:好不容易找到了一條鏈,結(jié)果發(fā)現(xiàn)遺憾的是,它并沒有刪數(shù),所以我們就此放棄了它。實際上并不需要放棄,而是我們繼續(xù)通過這一條鏈的頭尾強關(guān)系來得到一些新穎的結(jié)論,比如嵌入一些技巧結(jié)構(gòu),就像下面這些技巧一樣。
所以不要擔(dān)心它就像看起來那樣無用。
3-2?XY-Wing構(gòu)造
XY-Wing實際上內(nèi)容并不多,但它的使用在我們平時日常使用之中非常多,它可以使用強制的視角對一個單元格進行逐個的討論;也可以使用鏈的視角將其拉伸成一條鏈,來得到刪數(shù);甚至還可以使用偽數(shù)組來理解。而且結(jié)構(gòu)非常容易觀察,所以我們先要學(xué)習(xí)的就是關(guān)于它的構(gòu)造。
我們先來思考一下,XY-Wing到底能得到什么。我們套用AIC+的邏輯,可以得到對應(yīng)的XY-Wing+。

如圖所示,我們找到了一個XY-Wing,而它沒有刪數(shù)。不過沒關(guān)系,沒有刪數(shù)并不影響這個鏈的成立。既然XY-Wing是成立的,那么我們就可以得到的是,鏈的頭尾是稱強關(guān)系的,所以我們只需要輕松地將r4c2(5)和r6c4(5)用強關(guān)系連起來就好了。接著,我們的工作就是利用這個強關(guān)系來架起橋梁,產(chǎn)生刪數(shù)。幸運的是,我們確實發(fā)現(xiàn)了一個鏈,如下圖所示。

可以看到,這條鏈實際上就是一個多寶魚(即雙強鏈),不過這個雙強鏈的第一個強關(guān)系產(chǎn)生自一個XY-Wing結(jié)構(gòu)。
這種形式的XY-Wing,我們套用了鏈的邏輯將XY-Wing“發(fā)揚光大”,這樣的形式我們稱為XY-Wing的構(gòu)造(或構(gòu)造XY-Wing,記作XY-Wing+)。
不過,有些時候我們也可以稱為是雙強鏈的構(gòu)造,不過側(cè)重點不同。如果是雙強鏈的構(gòu)造,此時我們針對的就不會是前面的XY-Wing了,而是后面的這個雙強鏈了,比如之前的ALS-W-Wing,實際上就是W-Wing的構(gòu)造,而我們也可以稱為是ALS的構(gòu)造,這一點我們沒有必要著重去具體區(qū)分到底是誰的構(gòu)造。
不過,我們一般認為,如果你從技巧的框架出發(fā),那就稱為這個技巧的構(gòu)造。比如ALS-W-Wing技巧,我們一般稱為是W-Wing的構(gòu)造,因為它更側(cè)重是從W-Wing的框架出發(fā)的;而上面這一則示例里我們更著重的是從XY-Wing的框架出發(fā)的,所以稱為XY-Wing的構(gòu)造。
3-3?XYZ-Wing構(gòu)造
雖說XYZ-Wing跟XY-Wing就差了一個“鰭”,但實際上,XYZ-Wing的構(gòu)造卻比XY-Wing要有趣一些。首先我們拿出一則XYZ-Wing的示例。

可以看到,這就是一個普通的XYZ-Wing,不過這個XYZ-Wing我們?nèi)绻囍业芥湹拈_頭和結(jié)尾的話,就比較麻煩了。我們只能知道的是,我們應(yīng)當(dāng)在這3個橙色的3里尋找鏈頭和鏈尾,但如何分配鏈頭和鏈尾就變?yōu)榱艘粋€比較難受的事情。
實際上,不論怎么分配,都是可以的。例如下面的兩種情況:


可以看到,這兩種形式實際上就是很簡單地把其中兩個節(jié)點放到一起作為一個廣義的區(qū)塊節(jié)點處理,然后三個數(shù)就能重組為兩個節(jié)點,形成強關(guān)系了;而且,這兩種畫法實際上也符合鏈的視角。我們拿左圖舉例。如果r5c2(3)和r45c5(3)同時為假的話,則相當(dāng)于三個3全部去掉,于是在結(jié)構(gòu)里只剩下1和5,雖然是拐彎的,無法形成ALS,但你可以看到很顯然的是,1和5都沒有跨區(qū),而占據(jù)了三個單元格,這就意味著1和5只能填入到其中兩個單元格里,而總會剩下一個單元格無法填數(shù),這便產(chǎn)生了矛盾。所以,強關(guān)系是成立的。
同理,右圖的強關(guān)系和左圖的證明思路完全一樣。不過……總會存在一種情況,會用到下面的這種形式的東西。

如圖所示。實際上這種構(gòu)型依然是成立的。雖說跨區(qū)的兩個3形成一個節(jié)點的時候,得考慮是否填數(shù)重復(fù)的情況,但實際上在XYZ-Wing里,我們無需考慮,因為我們考慮的是同假時的情況,而不是同真時的情況。既然是為假,那么顯然就只有都不填的這種情況了。
講完了上述的邏輯后,我們來看XYZ-Wing+的用法。


如左圖所示,我們可以看到,這是一個XYZ-Wing,不過沒有刪數(shù)。不過不用擔(dān)心,我們繼續(xù)找到一條鏈,可以利用上這里面的三個7的強關(guān)系。確實我們找到了一個不太長的鏈,它用上了XYZ-Wing產(chǎn)生的強關(guān)系,只是長相有點丑陋。
我們便得到了正確的刪數(shù)。
下面我們來看一個斜著的情況,不過邏輯自己理解,難度也不太大。

如圖所示。
3-4 W-Wing構(gòu)造


如圖所示,這一則示例也是非常清晰的W-Wing構(gòu)造,所以邏輯就不再重復(fù)了,你可以自己推理得證。
3-5 對交空矩形構(gòu)造
實際上,之前講過的一個比較復(fù)雜的環(huán)結(jié)構(gòu)空矩形欠一數(shù)對也是可以具有構(gòu)造邏輯的?,F(xiàn)在我們來看看。

如圖所示。我們來闡述一下r7c2=r6c6(5)的邏輯。發(fā)現(xiàn)到r7c56和r89c6四個單元格只有2、4、8、9,而當(dāng)r7c2(5)和r6c6(5)同假后,在r7c2345和r5689c6兩個ALS里都將產(chǎn)生4、8、9的顯性三數(shù)組,并得到r7c4 = r9c6 = 5的結(jié)果。但顯然,兩個單元格同宮,不能填入一樣的數(shù)字,所以產(chǎn)生了矛盾,所以強關(guān)系是成立的。