第 4 講:區(qū)塊
區(qū)塊(Locked Candidates)也是我們常用的一種數(shù)獨技巧。
Part 1 宮區(qū)塊(Pointing)
接下來為了表示清楚邏輯,我們使用兩個典型的示例來介紹這個結構。
1-1 區(qū)塊排除

如圖所示,可以看到,數(shù)字3在b6里只有兩處位置可填:r4c78。其它的情況都通過宮排除給排除掉了?,F(xiàn)在我們雖然無法確定r4c78里到底是誰填3,但是我們可以發(fā)現(xiàn),它們既同宮又同行。那么根據(jù)數(shù)獨的規(guī)則,我們可以確定,r4上填入的3也只可能是在r4c78里,別無其它選擇(否則r4里但凡出現(xiàn)不是在r4c78的數(shù)字3,都會同時使得r4c78都不能填入3,然后b6就沒辦法填3了,于是就違背了數(shù)獨規(guī)則,形成矛盾)。這便使得r4c1不可填入3。
這一步的結論很重要。我們著重觀察c1,并使用列排除。發(fā)現(xiàn)c1上能填入數(shù)字3的位置僅有r6c1,所以r6c1 = 3。
這個技巧就叫做區(qū)塊。不過,區(qū)塊這個詞語也可以指代一種結構。我們可以把結構里用到的r4c78(3)叫做一個區(qū)塊。由于這個結構產(chǎn)生于宮之中,所以稱為宮區(qū)塊(Pointing)。
我們使用“單元格坐標(數(shù)字)”的格式來表示單元格里的指定數(shù)值,比如r4c78(3)就表示r4c78里的數(shù)字3。這種寫法大多都用來表示區(qū)塊結構。
既然這個區(qū)塊技巧依賴于排除法,那么我們就可以直接叫它區(qū)塊排除。那么有區(qū)塊排除,就有區(qū)塊唯一余數(shù),下面我們來看第二則示例。
1-2 區(qū)塊唯一余數(shù)

如圖所示,我們可以通過宮排除可以直接得到r79c1形成關于2的宮區(qū)塊結構。那么由于r79c1又是同列的結構,所以這就使得c1里填入2的位置也只能是r79c1里。那么,與之同列的r6c1就不能填2了。
既然有了結論,我們就可以再通過唯一余數(shù)來一個一個數(shù)數(shù),最終確定r6c1只可以填入數(shù)字8,所以r6c1 = 8。
可以看到,宮區(qū)塊只是把排除升了下級,那么行區(qū)塊和列區(qū)塊這種東西又應該是什么樣子呢?
Part 2 行列排除(Claiming)
所謂的行列區(qū)塊,和行列排除完全一樣,就是產(chǎn)生在行或者列的區(qū)塊。
2-1 行區(qū)塊(Locked Candidates in Row)

如圖所示。觀察r7,數(shù)字1的位置只有r7c46,于是r7c46(1)便形成了區(qū)塊結構,恰好它們同宮的關系,使得r9c5 <> 1,所以,對c5使用列排除,發(fā)現(xiàn)r1c5是能填入數(shù)字1的唯一位置,故r1c5 = 1。
2-2 列區(qū)塊(Locked Candidates in Column)

如圖所示,我們通過細致的列排除后發(fā)現(xiàn),r125c1都不能填入數(shù)字5。這樣便使得c1填5的位置只有r46c1,于是r46c1形成了5的區(qū)塊結構。
此時,區(qū)塊產(chǎn)生于c1上,所以是列區(qū)塊。然后利用唯一余數(shù)的方式,對r6c2數(shù)數(shù),并發(fā)現(xiàn)r6c2只能填入9(本應含有5這種情況的,但它被r46c1(5)的區(qū)塊排除掉了,因為r46c1除了同列以外,還同宮)。
那么這個技巧和之前的取名方式類似,既有區(qū)塊也有唯一余數(shù),所以它就叫區(qū)塊唯一余數(shù)。
有沒有發(fā)現(xiàn)它很難觀察?行列區(qū)塊和行列排除一樣,都是很難觀察的東西,那么,我們有一個專門用于觀察的輔助技巧:組合區(qū)塊(Cascading Locked Candidates)。
Part 3?組合區(qū)塊/級聯(lián)區(qū)塊(Cascading Locked Candidates)

如圖所示,這是一個關于數(shù)字6的列區(qū)塊,因為區(qū)塊的邏輯我們已經(jīng)完全講解過了,所以邏輯就自行理解了,這里著重闡述新視角。
我們嘗試著將區(qū)塊的這一列轉移到與之排除能排除到的兩個宮b25,你就會發(fā)現(xiàn),b25都恰好存在6的區(qū)塊,且構成了矩形形狀,如圖所示。

從這個示例可以發(fā)現(xiàn),b2里r3c56(6)是一個宮區(qū)塊,而b5里r6c56(6)也是一個宮區(qū)塊,且它們構成了矩形形狀。
這有什么用途呢?宮區(qū)塊的推導是對行和列作排除,而兩個宮區(qū)塊我們就可以這么想:r3c56和r6c56兩處都存在區(qū)塊,而構成了矩形,這使得這兩個區(qū)塊的最終填數(shù)必然是“錯開”的。即r3c56里要是r3c5填6,那r6c56里的r6c6才能填6;反之亦然。這樣一來我們就能發(fā)現(xiàn)到,c5和c6的其余單元格都不允許填入6了,因為c5里必然會有數(shù)字6出現(xiàn)在r36c5里;同理,c6里也必然有數(shù)字6出現(xiàn)在r36c6里。所以,我們聚焦于r8c6,它的填數(shù)可能只有3和6,而6顯然已經(jīng)不可能了,所以只能是3,故r8c6 = 3。
可以從實際上看出,它的推理邏輯顯然跟區(qū)塊已經(jīng)沒啥太大的關系了,畢竟跨了兩個區(qū)域后,推理也發(fā)生了變化。不過,我之所以說它的誕生旨在解決行列區(qū)塊和行列排除的觀察,就是因為它利用了宮區(qū)塊的觀察角度來代替了行列區(qū)塊(比如這里的列區(qū)塊,我們使用了兩個宮區(qū)塊代替掉了)??赡苣銜?,既然兩個宮區(qū)塊,那顯然個數(shù)已經(jīng)比一個列區(qū)塊要多了,這豈不是不劃算?不,相反地,它其實很劃算。因為這種區(qū)塊結構的觀察利用到了宮內(nèi)的區(qū)塊,而宮區(qū)塊最終依賴于宮的排除,宮排除是容易聚焦的,所以宮內(nèi)的結構,區(qū)塊也好,排除也好,都比行列性的結構要好看很多,甚至有時候,觀察到三四個宮排除或宮區(qū)塊的時間也不一定能看到一個行列排除或行列區(qū)塊。所以,你可以嘗試使用它來代替。
至于為什么級聯(lián)區(qū)塊結構能夠代替掉行列區(qū)塊或行列排除,它的理論依據(jù)和證明將依賴于非常難的邏輯,按照難度順序來的話,這里就暫時先不給出證明了。
組合區(qū)塊(Cascading Locked Candidates)以前也叫做級聯(lián)區(qū)塊,其中“級聯(lián)”一詞取自微軟公司Access軟件里的級聯(lián)更新(Cascading Update)和UI設計里級聯(lián)樣式表(簡稱CSS,Cascading Style Sheet)的級聯(lián),表示“相關聯(lián)”的意思。有時候這個詞也被翻譯為“層疊”。
單詞cascading的原形是cascade。

技巧信息
宮區(qū)塊:難度1.7。
行區(qū)塊:難度1.9。
列區(qū)塊:難度1.9。
名詞解釋
區(qū)塊(Locked Candidates):在某個區(qū)域下,某個數(shù)字的所有填數(shù)位置僅處于若干單元格內(nèi)的情況。
宮區(qū)塊(Pointing):可以指代帶有宮區(qū)塊結構的技巧,也可以指代宮區(qū)塊結構:即區(qū)塊在宮內(nèi)的結構。
區(qū)塊排除:依賴于排除出數(shù)的區(qū)塊技巧。
區(qū)塊唯一余數(shù):依賴于唯一余數(shù)出數(shù)的區(qū)塊技巧。
行列排除(Claiming):可以指代帶有行列區(qū)塊結構的技巧,也可以指代行列區(qū)塊結構:即區(qū)塊位于行或者列的結構。
組合區(qū)塊/級聯(lián)區(qū)塊(Cascading Locked Candidates):若干區(qū)塊共同構成一個矩形結構,并催生出數(shù)結論的技巧。這種結構一般用于代替行列排除和行列區(qū)塊技巧的觀察。
級聯(lián)更新(Cascading Update):在數(shù)據(jù)庫之中,如果若干表格存在依賴關系,那么一個變,后面跟著變的行為叫做級聯(lián)更新。
級聯(lián)樣式表/層疊樣式表(Cascading Style Sheet):一種輔助和美化普通 HTML 網(wǎng)頁的機制。它的保存文件形式為 *.css 格式,每一個文件里都包含所有 HTML 標簽指定的渲染樣式規(guī)則。