第 4 講:區塊

區塊Locked Candidates)也是我們常用的一種數獨技巧。

Part 1 宮區塊(Pointing)

接下來為了表示清楚邏輯,我們使用兩個典型的示例來介紹這個結構。

1-1 區塊排除

宮區塊 + 列排除

如圖所示,可以看到,数字3在b6里只有兩處位置可填:r4c78。其它的情況都通過宮排除給排除掉了。現在我們雖然無法確定r4c78里到底是誰填3,但是我們可以發現,它們既同宮又同行。那麼根據數獨的規則,我們可以確定,r4上填入的3也只可能是在r4c78里,別無其它選擇(否則r4里但凡出現不是在r4c78的数字3,都會同時使得r4c78都不能填入3,然後b6就沒辦法填3了,於是就違背了數獨規則,形成矛盾)。這便使得r4c1不可填入3。

這一步的結論很重要。我們着重觀察c1,並使用列排除。發現c1上能填入数字3的位置僅有r6c1,所以r6c1 = 3。

這個技巧就叫做區塊。不過,區塊這個詞語也可以指代一種結構。我們可以把結構里用到的r4c78(3)叫做一個區塊。由於這個結構產生於宮之中,所以稱為宮區塊Pointing)。

我們使用“單元格坐標(数字)”的格式來表示單元格里的指定數值,比如r4c78(3)就表示r4c78里的数字3。這種寫法大多都用來表示區塊結構。

既然這個區塊技巧依賴於排除法,那麼我們就可以直接叫它區塊排除。那麼有區塊排除,就有區塊唯一餘數,下面我們來看第二則示例。

1-2 區塊唯一餘數

宮區塊 + 唯一餘數

如圖所示,我們可以通過宮排除可以直接得到r79c1形成關於2的宮區塊結構。那麼由於r79c1又是同列的結構,所以這就使得c1里填入2的位置也只能是r79c1里。那麼,與之同列的r6c1就不能填2了。

既然有了結論,我們就可以再通過唯一餘數來一個一個數數,最終確定r6c1隻可以填入数字8,所以r6c1 = 8。

可以看到,宮區塊只是把排除升了下級,那麼行區塊和列區塊這種東西又應該是什麼樣子呢?

Part 2 行列排除(Claiming)

所謂的行列區塊,和行列排除完全一樣,就是產生在行或者列的區塊。

2-1 行區塊(Locked Candidates in Row)

行區塊 +  列排除

如圖所示。觀察r7,数字1的位置只有r7c46,於是r7c46(1)便形成了區塊結構,恰好它們同宮的關係,使得r9c5 <> 1,所以,對c5使用列排除,發現r1c5是能填入数字1的唯一位置,故r1c5 = 1。

2-2 列區塊(Locked Candidates in Column)

列區塊 + 唯一餘數

如圖所示,我們通過細緻的列排除后發現,r125c1都不能填入数字5。這樣便使得c1填5的位置只有r46c1,於是r46c1形成了5的區塊結構。

此時,區塊產生於c1上,所以是列區塊。然後利用唯一餘數的方式,對r6c2數數,並發現r6c2隻能填入9(本應含有5這種情況的,但它被r46c1(5)的區塊排除掉了,因為r46c1除了同列以外,還同宮)。

那麼這個技巧和之前的取名方式類似,既有區塊也有唯一餘數,所以它就叫區塊唯一餘數。

有沒有發現它很難觀察?行列區塊和行列排除一樣,都是很難觀察的東西,那麼,我們有一個專門用於觀察的輔助技巧:組合區塊Cascading Locked Candidates)。

Part 3 組合區塊/級聯區塊(Cascading Locked Candidates)

組合區塊-1

如圖所示,這是一個關於数字6的列區塊,因為區塊的邏輯我們已經完全講解過了,所以邏輯就自行理解了,這裏着重闡述新視角。

我們嘗試着將區塊的這一列轉移到與之排除能排除到的兩個宮b25,你就會發現,b25都恰好存在6的區塊,且構成了矩形形狀,如圖所示。

組合區塊-2

從這個示例可以發現,b2里r3c56(6)是一個宮區塊,而b5里r6c56(6)也是一個宮區塊,且它們構成了矩形形狀。

這有什麼用途呢?宮區塊的推導是對行和列作排除,而兩個宮區塊我們就可以這麼想:r3c56和r6c56兩處都存在區塊,而構成了矩形,這使得這兩個區塊的最終填數必然是“錯開”的。即r3c56里要是r3c5填6,那r6c56里的r6c6才能填6;反之亦然。這樣一來我們就能發現到,c5和c6的其餘單元格都不允許填入6了,因為c5里必然會有数字6出現在r36c5里;同理,c6里也必然有数字6出現在r36c6里。所以,我們聚焦於r8c6,它的填數可能只有3和6,而6顯然已經不可能了,所以只能是3,故r8c6 = 3。

可以從實際上看出,它的推理邏輯顯然跟區塊已經沒啥太大的關係了,畢竟跨了兩個區域后,推理也發生了變化。不過,我之所以說它的誕生旨在解決行列區塊和行列排除的觀察,就是因為它利用了宮區塊的觀察角度來代替了行列區塊(比如這裏的列區塊,我們使用了兩個宮區塊代替掉了)。可能你會問,既然兩個宮區塊,那顯然個數已經比一個列區塊要多了,這豈不是不划算?不,相反地,它其實很划算。因為這種區塊結構的觀察利用到了宮內的區塊,而宮區塊最終依賴於宮的排除,宮排除是容易聚焦的,所以宮內的結構,區塊也好,排除也好,都比行列性的結構要好看很多,甚至有時候,觀察到三四個宮排除或宮區塊的時間也不一定能看到一個行列排除或行列區塊。所以,你可以嘗試使用它來代替。

至於為什麼級聯區塊結構能夠代替掉行列區塊或行列排除,它的理論依據和證明將依賴於非常難的邏輯,按照難度順序來的話,這裏就暫時先不給出證明了。

組合區塊Cascading Locked Candidates)以前也叫做級聯區塊,其中“級聯”一詞取自微軟公司Access軟件里的級聯更新Cascading Update)和UI設計里級聯樣式表(簡稱CSSCascading Style Sheet)的級聯,表示“相關聯”的意思。有時候這個詞也被翻譯為“層疊”。

單詞cascading的原形是cascade。

技巧信息

  • 宮區塊:難度1.7。

  • 行區塊:難度1.9。

  • 列區塊:難度1.9。

名詞解釋

  • 區塊Locked Candidates):在某個區域下,某個数字的所有填數位置僅處於若干單元格內的情況。

  • 宮區塊Pointing):可以指代帶有宮區塊結構的技巧,也可以指代宮區塊結構:即區塊在宮內的結構。

  • 區塊排除:依賴於排除出數的區塊技巧。

  • 區塊唯一餘數:依賴於唯一餘數出數的區塊技巧。

  • 行列排除Claiming):可以指代帶有行列區塊結構的技巧,也可以指代行列區塊結構:即區塊位於行或者列的結構。

  • 組合區塊/級聯區塊Cascading Locked Candidates):若干區塊共同構成一個矩形結構,並催生出數結論的技巧。這種結構一般用於代替行列排除和行列區塊技巧的觀察。

  • 級聯更新Cascading Update):在數據庫之中,如果若干表格存在依賴關係,那麼一個變,後面跟着變的行為叫做級聯更新。

  • 級聯樣式表/層疊樣式表Cascading Style Sheet):一種輔助和美化普通 HTML 網頁的機制。它的保存文件形式為 *.css 格式,每一個文件里都包含所有 HTML 標籤指定的渲染樣式規則。

发表评论

%d 博主赞过: