HandBook
KLSudoku傳統數獨遊戲軟體使用者手冊1.1版本
申明
本手冊可以從項目Wiki地址擷取到最新版本: http://code.google.com/p/klsudoku/wiki/HandBook
授權申明:未經ttylikl授權,本手冊全部章節內容都禁止任何媒體和商業組織的轉載。個人可以轉載全部或部分章節內容到個人網路媒體(如部落格)上,但是轉載時請保留手冊來源說明。
目錄
- 申明
- 目錄
- 名詞解釋
- 數獨遊戲的規則說明
- KLSudoku的介面操作說明
- 普通模式的操作說明
- 熱點數格
- 在熱點數格裡填數
- 其餘操作熱點數格的方法
- 在普通模式使用解題提示
- 候選數模式的操作說明
- 候選數的自動顯示原則
- 普通模式和候選數模式的切換
- 如何利用候選數模式的標記操作解題
- KLSudoku的題目格式說明
- 複製和粘貼
- 提示與自動解題
- 撤銷與重做操作
- KLSudoku的題目產生及難度劃分
- 常用解題技巧
- 普通模式下的基礎技巧
- 單元唯一法( Sole Position Technique )
- 單元排除法( Basic Elimination Technique )
- 區塊排除法( Block Elimination Technique )
- 唯一餘數法( Sole Number Technique )
- 組合排除法( Combination Elimination Technique)
- 矩形排除法( Rectangle Elimination Technique)
- 候選數模式下的解題技巧
- 顯式唯一數法(Naked Single)
- 隱式唯一數法(Hidden Single)
- 區塊刪除法(Intersection Removal)
- 顯式數對法(Naked Pair)
- 隱式數對法(Hidden Pair)
- 顯式三數集法(Naked Triplet)
- 隱式三數集法(Hidden Triplet)
- 顯式四數集法(Naked Quad)
- 隱式四數集法(Hidden Quad)
- XY形態匹配法(XY-Wing)
- XYZ形態匹配法(XYZ-Wing)
- 矩形對角線法(X-Wing)
- 三鏈數刪減法(Sword Fish)
- 四鏈數刪減法(Jelly Fish)
- 唯一矩形排除法 Unique Rectangle(7種類型)
- X鏈解法(X-Chain)
- XY鏈解法(XY-Chain)
- 關連數刪減法(Forcing-Chain)
- KLSudoku附錄資訊
名詞解釋
英文 |
中文 |
說明 |
Cell |
數格 |
每一個需要填寫(或者已經填寫數位小方格) |
Row |
行 |
數獨裡橫向的9個數格組成一行,數獨由9個各不相交的行組成。 |
Column |
列 |
數獨裡縱向的9個數格組成一列,數獨由9個各不相交的行組成。 |
Box |
塊,宮,九宮 |
數獨裡橫向和縱向各3個數格組成的方陣稱為一個塊,數獨由9個各不相交的塊組成。 |
House、RCB |
行列塊 |
對行列塊的統稱或者說簡稱,根據上下文語義,可能代表行或者列,或者塊 |
Group |
組 |
對某一個數格,其group為由它所在行、列、塊的所有方格組成(不包含該數格),所以group還有另外一個英文名peers20 |
Candidate |
候選數 |
在一個數格裡,尚未排除的可能的數字1-9,稱為候選數。當一個數格裡只剩餘一個候選數的時候,或者一個house裡只有某個數格有某候選數時,那麼此候選數就是該數格的唯一候選數 |
數獨遊戲的規則說明
- 數獨遊戲裡的每一行(Row),有數字1-9,每個數字出現且僅出現一次
- 數獨遊戲裡的每一列(Column),有數字1-9,每個數字出現且僅出現一次
- 數獨遊戲裡的每一塊(Box),有數字1-9,每個數字出現且僅出現一次
除了上面的三個基本規則,數獨遊戲還有其餘的幾個規則:
- 每一個數獨題一定有解
- 每一個數獨題最多隻有一個解
數獨題有且只有一個解的特性,在一些解題的進階技巧裡也經常使用到。
KLSudoku的介面操作說明普通模式的操作說明
普通模式即非候選數模式,在這種遊戲模式下,在9 X 9的數格裡,只會出現初始局面的數字以及使用者自行填寫的數字。你需要自行推斷出某個數格應該填寫什麼數字,然後通過按鍵或滑鼠直接填寫。
在普通模式下進行遊戲,需要瞭解以下幾個問題:
- 如何確定對哪個數格操作?
- 如何填寫自己想要的數字?
- 如何標記可能的候選數?
在普通模式下,KLSudoku也提供了使用顏色標註數格和候選數來進行提示的輔助手段。在遇到困難局面時,可以使用提示來繼續進行遊戲。
熱點數格
在KLSudoku裡,使用了一個熱點數格的方式來標識將要對哪個數格操作,如裡的A9數格被填充為橙色,表示它即為當前的熱點數格。 熱點數格會跟隨滑鼠移動,但是也可以不使用滑鼠,而使用方向鍵上下左右進行移動。
在熱點數格裡填數
可以使用滑鼠點擊的方式,或者通過鍵盤按鍵的方式對熱點數格進行填數操作。要注意的是,如果你想要進行填數,並且所填的數字明顯違反了1.2節遊戲規則的時候,你的填數操作無效,可能不會有任何介面上的變化出現。
使用滑鼠方式時,如同所示,可以通過點擊9 X 9 的數格方陣上面表示列數的數字來改變預設的運算元字,當前的運算元字會以灰色背景和黑色數字來凸顯出來。
當在熱點數格上點滑鼠左鍵的時候,即代表要在這個數格填寫預設運算元字。但是如果在點滑鼠左鍵的同時還按住了CTRL鍵,則代表要在熱點數格增加一個和預設運算元字相同的候選數(在普通模式,不自動顯示候選數,但是可以自行添加刪除候選數)。
如
果不使用滑鼠,一樣可以通過鍵盤的方式進行遊戲。熱點數格可以通過方向鍵在9 X
9的數格內逐個移動。當移動到邊界的時候,如果繼續移動,則熱點數格會從另外一個方向出現。
當熱點數格到達期望的位置後,可以直接按下鍵盤上的數字按鍵1-9來在熱點數格填寫數字。如果在按下數字按鍵的同時,你還按住了CTRL鍵,那麼也同樣會
在熱點數格添加該數字為候選數而不是填寫該數字了。
其餘操作熱點數格的方法
雖然用滑鼠可以快速的定位熱點數格和進行填數操作,但是往往還得在填數之前先去選擇預設運算元,這顯然很影響操作的舒適感。所以在KLSudoku裡增加了一個功能,如果在熱點數格上點擊滑鼠右鍵,則會彈出一個快捷標籤彈窗,可以通過該彈窗進行快捷的操作。
在快捷標籤彈窗裡包含了填數和設定候選數兩個選項卡,每個選項卡上都有數字0-9,如所示。
標
簽彈窗出現後,你可以先根據自己想要進行的操作,選擇候選或者填數的標籤。彈窗會記憶上一次出現時所選擇的標籤,在很多時候,這個小小的特性可以方便不少
操作。
選擇標籤後,可以點擊相應數字,如果使用滑鼠左鍵點擊數字後,彈窗立即隱藏消失,同時會對熱點數格進行填數操作或者添加候選數的操作。如果是滑鼠右鍵點擊
了數字或者標籤彈窗,則彈窗立即隱藏消失,也不會對熱點數格進行任何操作。
在普通模式使用解題提示
在
普通模式下,KLSudoku可以針對顯式和隱式唯一數法給出使用顏色提示的,如就展示了一個隱式唯一數的推導過程。
而則展示了一個顯式唯一數的推導過程,在H8所在行,列,宮(塊)裡,可以找到數字1-8,所以H8隻能填寫數字9,在直觀解法裡,這也叫做唯一餘數
法。
在普通模式下,對於一些其他的進階解題技巧,在擷取提示的時候,KLSudoku會將相關的一些數格的候選數顯示出來,以協助你理解其推理過程。展示了區塊排除法的推理過程:
需要說明的是,即使是在普通模式下,如果使用了提示,那麼提示中涉及的關鍵數格的其餘候選數也會被顯示出來。例如在中,數格A8,A9,B8,C8,C9除了候選數7,其餘可能的候選數也會被顯示出來。
候選數模式的操作說明候選數的自動顯示原則
在候選數模式下,KLSudoku將自動計算每一個未填寫數位數格內可能的候選數。計算的原則為將所在行,列,宮裡出現過的數字排除掉。換一句話說,當如果一個數格填入了一個數字,那麼在這個數格所在的宮,行,列裡的其他所有數格的候選數就不會再有這個數。
下面的圖做了一個簡單的說明:
例如E4數格為數字7,所以在E行和4列,以及E4所在的中九宮裡,所有的數格都不會有候選數7。候選數的這個自動顯示是基於傳統標準數獨的三條基本遊戲規則來實現的。
普通模式和候選數模式的切換
在中還標明了可以通過點擊工具列按鈕上的“候選數”按鈕來顯示或者隱藏所有數格的候選數。 除了這個快捷操作方式,還可以點擊菜單“編輯”->“選項”,然後在彈出的選項視窗裡,點擊“顯示候選數”前面的複選框來實現同樣的功能。如所示:
如何利用候選數模式的標記操作解題
候選數有三種狀態:不顯示,標記刪除,正常。
通常不顯示的候選數,都是因為數獨的三個基本規則而被直接排除掉的。
候選數還可以用滑鼠右鍵點擊來標記為刪除或者正常兩個狀態。
當你使用擷取提示,或者自動解題時,如果你已經在某個數格把一個候選數標記為刪除狀態,KLSudoku會認為該數格不存在該候選數。
KLSudoku的題目格式說明
KLSudoku支援9x9的數字矩陣格式,也支援81個字元長的單行題目格式,無數字數格可以使用0或者.代替皆可,KLSudoku會自動識別處理。
KLSudoku輸出題目使用9x9格式。載入題目則9x9格式和81字元格式設定都可以。
9x9格式和81字元格式設定舉例如下:
81字元格式設定:
.216.784.7...1...39.......23.......82.......7.9.....6...4...7.....2.1.......8....
9x9矩陣格式:
.216.784.
7...1...3
9.......2
3.......8
2.......7
.9.....6.
..4...7..
...2.1...
....8....
KLSudoku
可以隨機產生題目,會在主程式目錄下從lvl1.xml –
lvl5.xml讀取5個層級難度的題目來進行遊戲,在安裝KLSudoku時,已經預設攜帶了4萬多道非常精簡的題目,如果你不喜歡,可以將安裝包附帶
的這幾個題庫檔案刪除,則可以使用KLSudoku即時產生的最新的題目。
複製和粘貼
你可以在遊戲進行時,從菜單或者工具列進行複製和粘貼的操作。
- 你可以將正在遊戲的題目的當前局面複製到剪貼簿。
複製的格式為與當前局面一致9行9列的數字矩陣,其中沒有填數的數格將以點號“.”代替。注意,複製當前局面的過程不檢查當前局面是否正確,也就是說如果你手工解題過程中存在錯誤,那麼複製出來的局面一樣保留此錯誤,
- 你也可以選擇將當前遊戲的起始局面複製到剪貼簿。
- 你也可以從其他軟體或網站將數獨題目粘貼到KLSudoku裡進行遊戲。
在解題過程中以及解題完成後,你還可以將解題過程複製到剪貼簿。
KLSudoku會在解題過程裡附上9x9格式以及81字元格式設定的題目。然後將解題過程逐步附上。
提示與自動解題
無論是在普通模式還是候選數模式,你都可以隨時通過按CTRL-H或者從菜單選擇,從工具列按鈕點擊的方式來讓KLSudoku給你一個當前最簡單的解題提示。
KLSudoku會以顏色來標註與提示相關的數格和候選數,同時在狀態條裡會以文字方式顯示推理過程。
如果你在尋求KLSudoku提示後,沒有執行撤銷操作,而是進行了其他解題操作,那麼當前的提示會被自動執行。當你連續擷取提示的時候,相當於讓KLSudoku執行自動單步解題操作。
你也可以通過工具列按鈕讓KLSudoku自動單步解題或者完全自動解題,但是需要注意的是,如果在之前你的手動解題過程如果存在錯誤則會遇到自動解題也無法完成的情況
撤銷與重做操作
KLSudoku自動記錄你解題的步驟,並且在這個基礎上,提供了無限制的撤銷與重做的功能。
當你覺得當前錯誤步驟存在問題的時候,你可以隨時通過點擊工具列的單步撤銷按鈕撤銷上一步操作。同樣的,也可以通過點單步重做按鈕將上一次的撤銷操作撤銷。
KLSudoku還通過校正解題步驟的正確與否,允許你將所有錯誤的步驟一次性全部撤銷,確保當前的局面和解題步驟是正確的。在解題的時候,你可以通過“撤銷全部錯誤”這個功能來隨時校正自己的操作步驟是否正確有效。
KLSudoku的題目產生及難度劃分
KLSudoku分了5級難度:容易,普通,困難,極難,骨灰
- 容易:只需要使用唯一數法,區塊排除法,數對排除法即可解題的題目
- 普通:除了“容易”題所需技巧,還需要使用三數集排除法,四數集排除法,X-Wing和XY-Wing和XYZ-Wing來進行解題的題目
- 困難:除了“普通”題所需技巧,還需要使用唯一矩形排除法,SwordFish?和JellyFish?技巧解題的題目
- 極難:除了“困難”題所需技巧,還需要使用X-Chain,XY-Chain,Forcing-Chain技巧進行解題的題目
- 骨灰:除了“極難”題所需技巧,還需要使用其他技巧的題目
KLSudoku可以隨機產生題目,同時也支援預置題庫,預置題庫為同目錄下的lvl1.xml – lvl5.xml
常用解題技巧普通模式下的基礎技巧
直觀法解題技巧是在普通遊戲模式下最常用的技巧,複雜一點的謎題,可能需要自行填寫候選數以採用進階技巧來解題
單元唯一法( Sole Position Technique )
這應該算是直觀法中最簡單的方法了。基本上只需要看謎題,推理分析一概都用不上,這是因為要使用它所需滿足的條件十分明顯。同樣,也正是因為它簡單,所以只能處理很簡單的謎題,或是在處理較複雜謎題的後期才用得上。
我們先來看在中的例子,觀察行A,可以看到除了A5外,其他所有的儲存格中都已有了數字,根據數獨遊戲的規則,即每行,列或區塊中不能有重複的數字,則A5中能填入的數字只能是行A中所未出現過的,也就是數字7。所以可以毫不猶豫地在A5中填入7。
這就是單元唯一法在行中的應用。這裡的單元(Unit, or group),指的是行,列或區塊。所以有三種情況:
- 當某行有8個儲存格中已有數字,或
- 當某列有8個儲存格中已有數字,或
- 當某區塊有8個儲存格中已有數字。
無論是哪種情況,我們都可以很快地在該行,列或區塊剩餘的空格中填入該單元還未出現過的數字。
同樣,在中我們還可以看到單元唯一法在列和區塊(宮)中的應用:
在第2列中,只有B2未填入數字,且這一列中數字5還未出現過。所以B2 = 5。
在區塊(宮)中也是一樣:
在起始於D1的區塊中(左九宮),只有F3還未填入數字,且這個區塊中數字9還未出現過,所以可以馬上在F3中填入9。
單元唯一法在解題初期應用的幾率並不高,而在解題後期,隨著越來越多的儲存格填上了數字,使得應用這一方法的條件也逐漸得以滿足。
單元排除法( Basic Elimination Technique )
單元排除法是直觀法中最常用的方法,也是在平常解決數獨謎題時使用最頻繁的方法。使用得當的話,甚至可以單獨處理中等難度的謎題。
使用單元排除法的目的就是要在某一單元(即行,列或區塊)中找到能填入某一數位唯一位置,換句話說,就是把單元中其他的空白位置都排除掉。
單元排除法對應於候選數法中的隱式唯一法。
那麼要如何排除其餘的空格呢?當然還是不能忘了遊戲規則,即行,列或區塊中不能有重複的數字。從另一個角度來理解,就是
- 如果某行中已經有了某一數字,則該行中的其他位置不可能再出現這一數字。
- 如果某列中已經有了某一數字,則該列中的其他位置不可能再出現這一數字。
- 如果某區塊中已經有了某一數字,則該區塊中的其他位置不可能再出現這一數字。
單純理解上面的規則還是不足以解題,但是在實踐中這些規則卻可以交叉使用。在實際解題過程中,應用最多也最方便的是對區塊的單元排除法。
我們可以先看下面這個例子:
對於起始於A4的區塊(上九宮),我們可以利用行,列及區塊的相互關係,即一個儲存格既在某一行上,也同時在某一列上以及某一區塊中的這種關係來解題。
- 觀察數字5在謎題中的位置,可以看到它出現在A3,B8,D5,G6和H5。而這些位置中,只有A3,B8,G6和 D5與起始於A4的區塊有關聯。
- 因為B8=5,它所在的第B行上的其他儲存格中不可能再出現5, 而區塊中的B5和B6正好也在第B行上,所以這兩個儲存格填入5的可能性被排除。
- 同理,因為D5=5,它所在的第5列中的其他儲存格不可能再填入5,而區塊中的B5,C5也正好在第5列上,因此,B5,C5填入5的可能性也被排除掉了。
- 再看第6列,因為G6=5,所以該列上的 B6,C6也不可能再填入5,而這些儲存格正好也在起始於A4的區塊中。所以,這個起始A4的區塊(上九宮)中能填入數字5的位置就只剩下了C4,這樣就通過排除法找到了答案,即C4=5。
下面再看一個在行中使用單元排除法的例子:
- 在謎題中觀察數字5和行G,在行G有6個空儲存格無法確定數字,但是D5位置上的5使得其所在的第5列中的其他儲存格上不能再出現5,所以G5不能填入5。
- H1上的5使得其所在的區塊(左下九宮)中也不能再填入5,它協助行G排除了三個儲存格G1,G2和G3
- 而第8列上的B8中的數字5使得同樣位於這一列上的G8也排除了填入5的可能。這樣,行G中能填入5的位置就只剩下G6了。
在列中也可以使用單元排除法:
- 在第4列中,我們試圖確定能填入數字1的位置。在行B中,數字1已經出現在B2上,所以B4不可能再填入數字1了。
- 而位於D5的數字1也使得D4,E4,F4排除了填入數字1的可能,因為它們位於同一區塊中。
- 在H行中,由於H7的數字為1,所以H4也不可能為數字1。這樣,第4列上就只有I4能填入數字1了。
通過上面的樣本,可以看到,要對區塊使用單元排除法,需要觀察與該區塊相交的行和列。要對行使用單元排除法,需要觀察與該行相交的區塊和列。要對列使用單元排除法,需要觀察與該列相交的區塊和行。
在
實際解題過程中,行,列和區塊之間的關係並不象上面這些圖中所示的那麼明顯,所以需要一定的眼力和細心觀察。一般來說,先看哪個數字在謎題中出現得最多,
就從哪個數字開始下手,找到還未填入這個數位單元(行,列或區塊),利用已填入該數位儲存格與單元之間的關係,看能不能排除一些不可能填入該數位位
置,直到剩下唯一的位置。如果害怕搞不清已經處理過哪些數位話,可以從數字1開始,從左上方的區塊開始一直檢查到右下角的區塊,看能不能在這些區塊中應
用單元排除法。然後測試數字2,以此類推。
單元排除法是應用得最多的直觀法,雖然在實踐中經常會因為粗心而漏掉很多使用這一方法的機會,但只要勤加練習,就可以運用自如。
區塊排除法( Block Elimination Technique )
區塊排除法是直觀法中進階的技法。雖然它的應用範圍不如單元排除法那樣廣泛,但用它可能找到用單元排除法無法找到的解。有時在遇到困難無法繼續時,只要用一次區塊排除法,接下去解題就會勢如破竹了。
區
塊排除法實際上是利用區塊與行或列之間的關係來實現的,這一點與單元排除法頗為相似。然而,它實際上是一種模糊排除法,也就是說,它並不象單元排除法那樣
利用謎題中現有的確定數字對行,列或區塊進行排除,而是在不確定數位具體位置的情況下進行排除的。這句話聽起來似乎不好理解,讓我們先從一個例子入手,
看看區塊排除法是怎麼應用的。
讓
我們先來觀察數字1,我們可以在C2,D5,I8看到有數字1,如何使用區塊排除法呢?(這個例子可以使用其他方法來得出結論,但是我們先不考慮其他技
巧!)
讓我們先觀察一下左下九宮,由C2和I8的1,我們排除了G2,H2,I1,I2,I3五個數格裡填寫數字1的可能,但是依然還有G1,G3,H3三個數
格可以是數字1。如所示:
如
何從G1,G3,H3裡找出正確的可以填寫數字1的數格呢?我們注意到D5的數字1,排除了第D行其他數格填寫數字1的可能。由於C2排除了第2列其他數
格填寫數字1的可能,於是可以得出結論,在左九宮裡,只有E3和F3可以填寫數字1,而且數字1也必然存在於E3,F3裡。於是我們可以根據所示再進
行一些排除推論:
由可以看到,E3,F3裡必然有數字1,所以第3列其他數格不能再為數字1,也就是說G3,H3不可能為數字1。
至此我們可以得出結論,在左下九宮,只有G1可以填寫數字1。
小結一下上面的求解方法:
解題時,實際上是在對目標區塊(主區塊)有影響的區塊(輔助區塊)中應用單元單元排除法,使輔助區塊滿足某些條件並能參與對主區塊的數字排除。在上例中,左下九宮就是主區塊,左九宮就是輔助區塊。
實際應用中,可能出現下面四種情況:
- 當某數字在某個區塊中可填入的位置正好都在同一行上,因為該區塊中必須要有該數字,所以這一行中不在該區塊內的儲存格上將不能再出現該數字。
- 當某數字在某個區塊中可填入的位置正好都在同一列上,因為該區塊中必須要有該數字,所以這一列中不在該區塊內的儲存格上將不能再出現該數字。
- 當某數字在某行中可填入的位置正好都在同一區塊上,因為該行中必須要有該數字,所以該區塊中不在該行內的儲存格上將不能再出現該數字。
- 當某數字在某列中可填入的位置正好都在同一區塊上,因為該列中必須要有該數字,所以該區塊中不在該列內的儲存格上將不能再出現該數字。
其中1,2兩種情況相對常見,也比較容易判斷。
區塊排除法也是一種非常常用的進階技巧,有時候需要多個輔助區塊才能得出最終推斷。但是只要通過大量的練習,就可以很快掌握這一技巧。
唯一餘數法( Sole Number Technique )
唯一餘數法是直觀法中較不常用的方法。雖然它很容易被理解,所以說明這個方法不需要很大篇輻,然而在實踐中,卻不易看出能夠使用這個方法的條件是否得以滿足,從而使這個方法的應用受到限制。
與單元唯一法相比,唯一餘數法是確定某個儲存格能填什麼數的方法,而單元唯一法是確定某個數能填在哪個儲存格的方法。另外,應用單元唯一法的條件十分簡單,幾乎一目瞭然。
與候選數法相比,唯一餘數法相當於顯式唯一法。雖然顯式唯一法是候選數法中最簡單且應用最容易的方法,但在直觀法中卻正好相反。
例如,G4數格可以使用唯一餘數法得出結論,只能填寫數字9。因為A4=1,G9=2,G2=3,D4=4,G3=5,F4=6,I5=7,G5=8,所以G4=9。
推論過程很好理解,但是在觀察的時候,卻很難注意到這點!
組合排除法( Combination Elimination Technique)
組合排除法和區塊排除法一樣,都是直觀法中進階的技法,但它的應用範圍要更小一點。一般情況下,基本沒有機會用到這種方法解題,所以要找到相應的例子也都很困難。當然,如果你希望優先以這個技法來解題的話,還是能碰到很多能符合使用組合排除法條件的情況。
組合排除法,顧名思義,要考慮到某種組合。這裡的組合既包括區塊與區塊的組合,也包括儲存格與儲存格的組合,利用組合的關聯與排斥的關係而進行某種排除。它也是一種模糊排除法,同樣是在不確定數位具體位置的情況下進行排除的。下面先看一個例子:
對於上面這個謎題,你能確定數字6在起始於G4的區塊中的位置嗎?
要想獲得正確的答案初看起來有些困難。因為雖然在G9和H3已經存在了兩個6,但是利用它們只能行排除區塊中的G4和H6兩個儲存格,還是無法確定6到底是在I4還是在I5中。這時候,組合排除法就派上用場了。
現在撇開起始於G4的區塊,先看它上面的兩個區塊,即起始於A4和D4的區塊。這幾個區塊的共同特點是佔有同樣的幾列,也就是第4列至第6列,因此它們之間的數字會相互直接影響。
對於起始於A4的區塊,利用A1處已有的數字6進行行排除,可以得到這個區塊中可能填入6的位置只剩下兩個:B5和C6。對於起始於D4的區塊,利用E7處已有的數字6進行行排除,可以得到這個區塊中可能填入6的位置也剩下兩個:F5和F6。
這時,我們仍無法確定6在這兩個區塊中的確切位置。但不妨對可能出現的情況作一下分析:
- 假設在起始於A4的區塊中,B5=6,則同一區塊中的C6必不為6,而且B5還將列排除F5,這樣在起始於D4的區塊中,只有F6=6。
- 假設在起始於A4的區塊中,C6=6,則同一區塊中的B5必不為6,而且C6還將列排除F6,這樣在起始於D4的區塊中,只有F5=6。
簡
單地說,只有兩種可能:B5=6且F6=6,或者C6=6且F5=6。決不會再出現其他的情況。但無論是其中哪一種情況,第5列和第6列都會有確定的6出
現在這兩個區塊中,也就是說,第5列和第6列的其他位置不可能再出現數字6。這樣,原本無法肯定的6在起始於G4區塊中的位置,一下子就變得明確了。
利用起始於A4和D4的區塊對起始於G4的區塊進行列排除,可以把I5排除掉,這樣,就只剩下I4可以填入6了。
小結一下,組合排除法的要滿足的條件如下:
- 如果在橫向並行的兩個區塊中,某個數字可能填入的位置正好都分別佔據相同的兩行,則這兩行可以被用來對橫向並行的另一區塊做行排除。
- 如果在縱向並行的兩個區塊中,某個數字可能填入的位置正好都分別佔據相同的兩列,則這兩列可以被用來對縱向並行的另一區塊做列排除。
矩形排除法( Rectangle Elimination Technique)
矩形排除法雖然淺顯易懂,但一般在實際解題的時候應用得卻比較少。這是因為即使謎題中存在滿足使用這一方法的情況,也很難直接看出來。然而,相對組合排除法而言,在解題過程中倒是能有更多的機會用上矩形排除法。下面先看一個例子:
對
於這個謎題,如果不用矩形排除法是無法繼續下去的。我們將通過講解這種技法,從而找到數字8在起始於G1
的區塊中的位置。乍看之下,好象一籌莫展。因為B2和E3上的8隻能列排除左下角這個區塊中的G2,
H2,G3和I3這4個儲存格,這時仍剩下兩個儲存格G1和H1無法確定。
讓我們先來留意一下第6列,這一列中暫時沒有8,那麼8可能會填入哪幾個儲存格中呢?首先,B2中的8行排除了B6,而E3和F4中的8又分別行排除了E6和F6。這樣,能填入8的位置就只剩下C6和I6了。見:
同樣,對於第9列,由於F4的行排除,F9不可能填8,所以這一列能填入8的位置也就只剩下C9和I9了。
湊巧的是,這兩列中能填入8的位置都在同樣的兩行上,即行C和行I。這時就為我們應用矩形排除法創造了前提條件。
如果第6列中C6=8,那麼I6和C9一定不能是8。而第9列這時就只剩下I9能填入8了;
又或者如果第6列中I6=8,那麼C6和I9一定不能是8,而第9列就只剩下C9能填入8了。
不可能再有第3種情況。所以,要麼C6=8且I9=8,要麼I6=8且C9=8。但無論是哪種情況,不難發現,行C和行I都已填入了8,所以這兩行的其他位置不可能再填入8。我們正好可以利用這一點來進行排除。
觀察起始於G1的區塊,我們已經知道現在只剩下G1和I1兩個儲存格無法確定了,通過上面的分析,利用矩形排除法排除位於行I上的I1,就可以確定數字8一定在G1上。
總結一下,使用矩形排除法的條件如下:
- 如果一個數字在某兩行中能填入的位置正好在同樣的兩列中,則這兩列的其他的儲存格中將不可能再出現這個數字;
- 如果一個數字在某兩列中能填入的位置正好在同樣的兩行中,則這兩行的其他的儲存格中將不可能再出現這個數字。
矩形排除法可以說是直觀法中最困難的技法,因為當前的謎題即使滿足應用這一方法的條件,也實在太難發現了。一般情況下,盡量先使用其他相對簡單的直觀法。如果最後連矩形排除法都用上還是無法解題,你可能就需要嘗試候選數法了。
候選數模式下的解題技巧顯式唯一數法(Naked Single)
這是候選數刪減法中最簡單的一種方法,就是掃描候選數柵格表,如果哪個儲存格中只剩下一個候選數,就可應用顯式唯一法,在該儲存格中填入這個數字,並在相應行,列和區塊的候選數中刪除該數字。
儲存格A1有唯一的候選數9,則毫無疑問地把數字9填入該儲存格中,並掃描其所在行,列和區塊的候選數中有無數字9:
如果有,則把9從這些儲存格的候選數中刪除:
顯式唯一法雖然簡單,但卻是最有效候選數刪減法之一;尤其在謎題相對簡單時,有時單單使用顯式唯一法就可以解題。
在KLSudoku裡,當在候選數模式下進行遊戲的時候,如果你在一個數格填寫了數字,那麼KLSudoku會自動將數格所在行列宮的其他數格裡的這個候選數進行排除。
隱式唯一數法(Hidden Single)
見文知義,隱式唯一法也是唯一候選數法的一種,但它肯定不如顯式唯一法那樣顯而易見。我們知道,如果某一個儲存格中只有一個候選數字,這時可以毫不猶豫地填入它;但是有沒有這種情況,即使某個儲存格中有不止一個候選數字,我們也可以輕易地推斷出這個儲存格的正確解答呢?
再看一看上面的題目:
在第A行中,儲存格A7中雖然有多個候選數,但觀察整列後我們發現,只有這個儲存格中有數字3。根據數獨遊戲的規則,每一列中都必須要有從1到9的所有數字,而同時3卻只能出現在這個儲存格中,所以很顯然A7=3。當然,別忘了把3從A7所在的列和區塊中刪除。
舉的例子是在行裡發現的隱式唯一數,類似的,隱式唯一數也可以出現在列和宮中。 因為隱式唯一數在遊戲進行中不是很易於觀察,所以也可以在遊戲的時候結合直觀法裡的單元排除法來發現隱式唯一數。