第 30 講:守護(hù)者
Part 1?守護(hù)者的基本邏輯

如圖所示,我們發(fā)現(xiàn),如果把r2c3(4)和r6c7(4)都去掉后,r25、c17和b4五個(gè)區(qū)域就會(huì)出現(xiàn)關(guān)于數(shù)字4的共軛對(duì),而且恰好成環(huán)。那么這會(huì)發(fā)生什么樣的奇妙情況呢?
因?yàn)殒溞枰惶娲嬖?,所以我們隨便選取一個(gè)節(jié)點(diǎn)作為鏈頭,比如r5c1(4),向上走鏈結(jié)構(gòu)。我們之前說過一點(diǎn)。強(qiáng)關(guān)系的定義下的兩個(gè)候選數(shù),是一定滿足弱關(guān)系的定義的,但該用強(qiáng)關(guān)系還是弱關(guān)系,取決于關(guān)系的交替出現(xiàn)情況。也就是說,共軛對(duì)肯定是強(qiáng)關(guān)系了,不過以r5c1(4)作為鏈頭向上引出AIC的話,那么r2c1(4)和r2c7(4)應(yīng)為弱關(guān)系。隨即出現(xiàn)以下鏈結(jié)構(gòu):
當(dāng)我們得到r5c1 = 4時(shí),同時(shí)可以知道的是r2c1和r5c8都不填4,于是r2和b6之中,r4c7和r2c7就應(yīng)當(dāng)填4。此時(shí)發(fā)現(xiàn),r24c7(4)同列,所以矛盾。所以,直接“裸露”出來的五個(gè)共軛對(duì)首尾成環(huán)是完全不可以的,也就是說,r2c3(4)和r6c7(4)不同時(shí)為假。所以r2c3(4)和r6c7(4)至少有一個(gè)為真,于是刪除交集,故r2c7, r6c3 <> 4。
這個(gè)技巧稱為守護(hù)者(Guardian)。很不幸的是,它的邏輯很復(fù)雜。接下來我們?cè)賮砜匆粍t示例。

如果{r2c7, r3c5, r68c6}(5)全部去掉后,剩下的r68、c57和b8里存在五個(gè)連續(xù)的共軛對(duì),并使之成環(huán)。顯然,這一點(diǎn)是不允許出現(xiàn)的,所以假設(shè)矛盾,即r2c7, r3c5, r68c6里必須至少有一處是填入5的;因此刪除交集,即r2c6 <> 5。
接下來我就來講一下原理,這會(huì)讓你覺得技巧尋找和理解起來更加輕松一些。
Part 2?守護(hù)者理論的證明
那么,為什么說,只有大于3且是奇數(shù)個(gè)共軛對(duì)兩兩連接、首尾成環(huán)時(shí),結(jié)構(gòu)必然不存在呢?實(shí)際上,我們可以如此思考。
共軛對(duì)要求兩處填數(shù)必須一真一假,那么一旦有一個(gè)數(shù)為真,那另外一個(gè)就必須為假,反之亦然。如果有奇數(shù)個(gè)的話,順次推導(dǎo)下去,必然會(huì)遇到開頭和結(jié)尾兩處的數(shù)同真假。而結(jié)構(gòu)成環(huán),而且還是共軛對(duì),所以這兩處必須也要求真假性相反(一個(gè)真一個(gè)假)。所以這已經(jīng)違背了要求,所以該結(jié)構(gòu)的內(nèi)部是無解的(無法找到合適的填法)。
這一點(diǎn)和致死形式類似,但不同。BUG結(jié)構(gòu)的致死形式確實(shí)內(nèi)部無解,但BUG屬于致命結(jié)構(gòu)一節(jié)的內(nèi)容,它基于題目唯一解,而此技巧跟唯一解要求無關(guān)。
Part 3 死環(huán)
我們?cè)賮砜匆粍t奇特的示例。

如圖所示,感覺略熟悉:感覺有點(diǎn)像是UR區(qū)塊類型的感覺,也有點(diǎn)像是遠(yuǎn)程數(shù)對(duì)。它的邏輯是這樣的:
如果r69c3(5)同假時(shí),r69和c3均會(huì)產(chǎn)生2、9數(shù)對(duì),在刪除所有其它位置的2和9后,2和9構(gòu)成由5個(gè)共軛對(duì)首尾拼接成環(huán)且獨(dú)立的守護(hù)者結(jié)構(gòu),這種結(jié)構(gòu)顯然是不成立的,因?yàn)椴徽撛趺刺顢?shù),始終會(huì)存在同一個(gè)區(qū)域的兩個(gè)單元格的填數(shù)一致,這樣便產(chǎn)生了矛盾。所以原假設(shè)錯(cuò)誤,故r69c3(5)不可同為假,即r69c3(5)至少一個(gè)為真。所以,c3的其余單元格都不應(yīng)該填5,即r24c3 <> 5。
這個(gè)結(jié)構(gòu)利用到了數(shù)對(duì)的刪除的特性,隨之產(chǎn)生共軛對(duì)首尾成環(huán)的守護(hù)者的出錯(cuò)情況。它使用了兩個(gè)結(jié)構(gòu)長(zhǎng)相一模一樣,但候選數(shù)不同的守護(hù)者結(jié)構(gòu)2和9。這個(gè)技巧叫做死環(huán)(Bivalue Oddagon),意味著r69c3(5)同假時(shí),內(nèi)部結(jié)構(gòu)有兩個(gè)不同數(shù)字的守護(hù)者合并在一起形成了無法填數(shù)的死亡局面。
不過,這樣的結(jié)構(gòu)還可以有很多情況。我們來看另外一則死環(huán)的例子。

如圖所示,可以看到如果我們省去r5c2(6)和r5c7(2)的話,因?yàn)榫G色的結(jié)構(gòu)是一個(gè)死環(huán),不包含別的數(shù)字就會(huì)導(dǎo)致整個(gè)結(jié)構(gòu)掛掉。正是因?yàn)槿绱?,我們不能直接消去這兩個(gè)數(shù)字。
但是,這兩個(gè)橙色的數(shù)字(這個(gè)6和2)同時(shí)都填進(jìn)去的話,r5c5就沒辦法填數(shù)字了。因此,這兩個(gè)數(shù)字還只能有一個(gè)是對(duì)的數(shù)字。這樣的話,r5c5剛好配合r5c2(6)或者r5c7(2)的其中一個(gè),構(gòu)成2和6的數(shù)對(duì)結(jié)構(gòu)。因此,r5別的地方就不能填別的2和6了,因此可刪去這里紅色的2。
Part 4 拓展死環(huán)
接下來我們拓展一下死環(huán)的結(jié)構(gòu)。正是因?yàn)樗拉h(huán)有點(diǎn)不像是鏈,而跟前面的UR這些的結(jié)構(gòu)有點(diǎn)像,畢竟還有別的類型,因此我們可以拓展死環(huán)結(jié)構(gòu)。

如圖所示,這里r5c9(5)和r9c5(4)均可刪除。這一點(diǎn)有點(diǎn)不好理解,我們先把題目放在一旁,我們先來看下單獨(dú)提出來的結(jié)構(gòu)圖。
4-1 構(gòu)型
現(xiàn)在我們來看一下構(gòu)型。

如圖所示,這樣的結(jié)構(gòu)是最開始的結(jié)構(gòu)。顯然這樣的結(jié)構(gòu)是會(huì)掛的結(jié)構(gòu)。不過,我們?yōu)榱送茝V結(jié)構(gòu),我們嘗試追加一個(gè)格子。

如圖所示,但是很顯然r5包含三個(gè)格子只能放入1和2了,這樣肯定不行。那么我們還得繼續(xù)往上添加別的數(shù)字。

如圖所示,顯然,這樣的結(jié)構(gòu)看起來好像沒矛盾了。但是實(shí)際上也是矛盾的,這一點(diǎn)我們可以通過前面一節(jié)的死環(huán)的補(bǔ)充例子里看到這樣的結(jié)構(gòu)是不存在的。當(dāng)然,你也可以自己試著推導(dǎo)矛盾:假設(shè)我們隨便往r2c2填入一個(gè)數(shù)字。一直往下會(huì)得到矛盾:

如圖所示。這樣的結(jié)構(gòu)肯定會(huì)掛。因此,我們添一個(gè)數(shù)字還不夠,還得添加兩種類型的數(shù)字,于是可以得到這樣的結(jié)構(gòu)。

如圖所示。只有這樣,結(jié)構(gòu)才不會(huì)出現(xiàn)直接出錯(cuò)的現(xiàn)象。可問題又來了。這種結(jié)構(gòu)怎么用呢?剛才我們是利用結(jié)構(gòu)外側(cè)同行列的雙值格得到結(jié)果的,對(duì)吧。那么我們繼續(xù)應(yīng)該如何讓結(jié)構(gòu)生效,變得可以直接刪除數(shù)字呢?變成下面這樣:

如圖所示。這樣結(jié)構(gòu)只是補(bǔ)充了一個(gè)3和一個(gè)4到r6c5上去,但結(jié)構(gòu)就可以直接刪數(shù)了。刪除哪些數(shù)字呢?我們來試著假設(shè)填入一下。按照最簡(jiǎn)單的辦法,我們從r2c2開始分別假設(shè)填入1和2兩種情況進(jìn)行討論,就會(huì)得到下面這樣的情況。


對(duì)比兩個(gè)圖可以發(fā)現(xiàn),我們最終只有數(shù)字3和4是穩(wěn)定出現(xiàn)在r5c46和r6c5這三個(gè)格子的,而里面原本存在的1和2因?yàn)榧僭O(shè)的關(guān)系最終無法同時(shí)存在于兩種情況里。因此,這種結(jié)構(gòu)的最終刪數(shù)是3和4,刪數(shù)的范圍就是b5的其它格子了。
結(jié)構(gòu)仍然具有推廣性質(zhì)。我們剛才最開始將死環(huán)補(bǔ)充了r5c4才構(gòu)造出了這樣的結(jié)構(gòu);那么我們可以嘗試?yán)^續(xù)補(bǔ)充r4c5這個(gè)格子,并再次補(bǔ)充一種數(shù)字類型進(jìn)去。

如圖所示。因?yàn)槲覀冎欢嗔艘粋€(gè)格子出來,所以我們只需要多補(bǔ)充一種數(shù)字類型就可以了(比如這里的5是多出來的數(shù)字類型),而不是同時(shí)多兩種數(shù)字類型。因?yàn)槎鄡煞N會(huì)導(dǎo)致結(jié)構(gòu)無法繼續(xù)推導(dǎo);但不補(bǔ)充數(shù)字類型,還是使用1、2、3、4的話,結(jié)構(gòu)因?yàn)槎嗔艘粋€(gè)格子,并且和原本補(bǔ)充的3和4出現(xiàn)位置同宮,因此會(huì)出現(xiàn)四個(gè)格子只能填入1、3和4或者2、3和4這三種數(shù)字,導(dǎo)致結(jié)構(gòu)出現(xiàn)錯(cuò)誤。
那么,回到這個(gè)結(jié)構(gòu),刪數(shù)的位置是哪些地方呢?試填一下就知道了:


如圖所示,我們可以看到,此時(shí)我們依舊按r2c2假設(shè)兩種填法,可以得到最終b5出現(xiàn)1、3、4、5構(gòu)成的四數(shù)組,以及2、3、4、5構(gòu)成的四數(shù)組。此時(shí)只有數(shù)字3、4、5三個(gè)數(shù)字類型是穩(wěn)定出現(xiàn)的,因此b5可以刪除的是別的格子的3、4、5。
那么結(jié)構(gòu)構(gòu)型我們就看到這里?;氐揭?/p>
4-2 引例邏輯解釋

如圖所示。我們很明顯就可以看到,結(jié)構(gòu)是多出來了3、4、5三種數(shù)字的,只不過現(xiàn)在4和5的位置有點(diǎn)奇怪,并不是補(bǔ)充在b5里的。我們?nèi)匀惶子迷镜乃悸?,看看是否能行得通?/p>
假設(shè)3、4、5三種數(shù)字同時(shí)消失,結(jié)構(gòu)只剩下1和2的話,顯然結(jié)構(gòu)不成立,因?yàn)榻Y(jié)構(gòu)不只是死環(huán)本身的問題了,還多用了r4c5和r5c4兩個(gè)格子;但是我們?nèi)绻槐A艚Y(jié)構(gòu)里3、4、5的其中一種數(shù)字的話,結(jié)構(gòu)也是不夠成立的,因?yàn)橹白C明過了:結(jié)構(gòu)至少需要兩種數(shù)字補(bǔ)充進(jìn)去。
接著。因?yàn)槲覀兓谒拉h(huán)結(jié)構(gòu),連著補(bǔ)充了兩個(gè)格子r4c5和r5c4作為使用,所以我們需要至少補(bǔ)充三種數(shù)字進(jìn)去,才會(huì)使得結(jié)構(gòu)不掛掉。這一點(diǎn)沒問題,對(duì)吧。那么,三種數(shù)字的情況下,因?yàn)閯偤檬沟媒Y(jié)構(gòu)不掛掉,所以3、4、5應(yīng)當(dāng)是每一個(gè)數(shù)字都不可以全部消失,因此,補(bǔ)充的3、4、5,都可以作為刪數(shù)的條件來使用。于是,結(jié)論就很明顯了:3所在的宮(b5),結(jié)構(gòu)外的別的位置不能填3;4所在的列(c5),結(jié)構(gòu)外的別的位置不能填入4;而5所在的行(r5),結(jié)構(gòu)外的別的位置不能填入5,因此紅色的數(shù)字都可以刪除。
這種結(jié)構(gòu)基于死環(huán),因此我們稱為拓展死環(huán)(Extended Bivalue Oddagon)。
至此,我們就講完了死環(huán)的基本邏輯。