1. 程式人生 > >數獨解題方法大全

數獨解題方法大全

數獨這個數字解謎遊戲,完全不必要用到算術!會用到的只是推理與邏輯。解題方法分兩大類:直觀法和候選數法。

 直觀法就是不需要任何輔助工具,從接到數獨謎題的那一刻起就可以立即開始解題。絕不猜測。數獨直觀法解題技巧主要有:唯一解法、基礎摒除法、區塊摒除法、唯餘解法、矩形摒除法、單元摒除法,餘數測試法。

候選數法就是解數獨題目需先建立候選數列表,根據各種條件,逐步安全的清除每個宮格候選數的不可能取值的候選數,從而達到解題的目的。

使用候選數法一般能解比較複雜的數獨題目,但是候選數法的使用沒用直觀法那麼直接,需要先建立一個候選數列表的準備過程。所以實際使用時可以先利用直觀法進行解題,到無法用直觀法解題時再使用候選數方法解題。

候選數法解題的過程就是逐漸排除不合適的候選數的過程,所以在進行候選數刪除的時候一定要小心,確定安全的刪除不合適的候選數,否則,很多時候只有重新做題了。有了計算機軟體的幫助,使得候選數表的維護變得輕鬆起來。

數獨候選數法解題技巧主要有:唯一候選數法、隱性唯一候選數法、區塊刪減法、數對刪減法、隱性數對刪減法、三鏈數刪減法、隱性三鏈數刪減法、矩形頂點刪減法、三鏈列刪減法、關鍵數刪減法、關連數刪減法。

一、直觀法:

1、唯一解法:

        當某行已填數字的宮格達到8個,那麼該行剩餘宮格能填的數字就只剩下那個還沒出現過的數字了。成為行唯一解。

        當某列已填數字的宮格達到8個,那麼該列剩餘宮格能填的數字就只剩下那個還沒出現過的數字了。成為列唯一解。

        當某九宮格已填數字的宮格達到8個,那麼該九宮格剩餘宮格能填的數字就只剩下那個還沒出現過的數字了。成為九宮格唯一解。

  下面是例題:

A行已經添入8個數字,A行只有數字3沒有出現過,所以A9=3,這是行唯一解。


第1列已經添入8個數字,第1列只有數字5沒有出現過,所以E1=5,這是列唯一解。


在A8所在九宮格區域已經添入8個數字,只有數字9沒有出現過,所以A8=9,這是九宮格唯一解。


2、基礎摒除法

     基礎摒除法就是利用1 ~ 9 的數字在每一行、每一列、每一個九宮格都只能出現一次的規則進行解題的方法。基礎摒除法可以分為行摒除、列摒除、九宮格摒除。

實際尋找解的過程為:

尋找九宮格摒除解:找到了某數在某一個九宮格可填入的位置只餘一個的情形;意即找到了 該數在該九宮格中的填入位置。

尋找列摒除解:找到了某數在某列可填入的位置只餘一個的情形;意即找到了該數在該列中的填入位置。

尋找行摒除解:找到了某數在某行可填入的位置只餘一個的情形;意即找到了該數在該行中的填入位置。

    利用基礎摒除法解題的過程就是依次從數字1 ~ 9 在行、列、九宮格尋找能放入該數唯一的一個位置。需要綜合用到行摒除、列摒除、九宮格摒除的方法。

    看能用基礎摒除法確定B2、C8、E7、F6、I5的數字嗎?

題目如下:


A4=9,則A行其它格排除9;G1=9,第1列排除數字9;D3=9,第3列排除數字9。

見下圖


由基礎摒除法,第A1所在的九宮格內9只有一個唯一的位置,即確定B2=9。

見下圖


A4=9,則4列其它格排除9;G1=9,第G行排除數字9;H9=9,第H行排除數字9。

見下圖


由基礎摒除法,第G4所在的九宮格內9只有一個唯一的位置,即確定I5=9。

見下圖


A4=9,則4列其它格排除9;D3=9,第D行排除數字9;I5=9,第5列排除數字9。

見下圖


由基礎摒除法,第D4所在的九宮格內9只有一個唯一的位置,即確定F6=9。

見下圖


A4=9,則A行其它格排除9;B2=9,第B行排除數字9;H9=9,第9列排除數字9。

見下圖

由基礎摒除法,第A7所在的九宮格內9只有一個唯一的位置,即確定C8=9。

見下圖


C8=9,則8列其它格排除9;D3=9,第D行排除數字9;F6=9,第F行排除數字9;H9=9,第9列排除數字9。

見下圖


由基礎摒除法,第D7所在的九宮格內9只有一個唯一的位置,即確定E7=9。

3、區塊摒除法

    區塊摒除法是基礎摒除法的提升方法,是直觀法中使用頻率最高的方法之一。

        所謂區塊,就是將行分成3個三個相連的小方塊構成,列也是分成3個三個相連的小方塊構成。九宮格同樣被看成由3個三個相連的小方塊構成,如下面示意圖: 

區塊摒除法的核心思想如下面解釋(以行為例),對於在列也是相同的道理


假如(G1~G3)黃色區域區塊其中之一是數字9。


則,(H4~H6)藍色區域可能含有數字9。

否則(I4~I6)綠色區域含有數字9。


假定我們已確定(G1~G3)黃色區域區塊其中之一是數字9。

(H4~H6)藍色區域含有數字9。

則:在(I7~I9)綠色區域一定含有數字9。如果再通過其它方法確定(I7~I9)綠色區域中某兩個宮格不能為數字9,則就能確定數字9在(I7~I9)區塊的具體位置。

下面舉一些例子 

能使用區塊摒除法確定F6的數字嗎? 


D2=2,則E1~E3藍色區塊,或F1~F2綠色區塊必包含數字2。 


又有B1=2,利用列摒除法,E1、F1不能為數字1,有F2,F3已填有數字,所以,E2~E3藍色區塊必有數字2

 

由上面得出黃色區塊,藍色區塊包含數字2,這是典型的區塊摒除法,得到綠色區塊必包含數字2 


又G4=2,F5已添入數字,所以F6=2


4、唯餘解法

    唯餘解法就是某宮格可以添入的數已經排除了8個,那麼這個宮格的數字就只能添入那個沒有出現的數字。


唯餘解法道理非常簡單,但在實際使用是比較困難,要注意識別。A5=?

其實這就是唯餘解法的原理,很簡單吧。但是實際使用時就不會容易發現了。


能使用唯餘解法確定B7的值嗎?

呵呵,等於8。 


能確定E9、A9、B9、C9的值嗎?


由區塊摒除法可以得出E9=9。在區塊摒除法沒有舉這個例子,這裡補充。


由唯餘解法,C9=2。 


同樣,可得出B9=4,A9=8。

5、矩形摒除法

 矩形摒除法是比較高階的排除方法,雖然矩形摒除法的原理非常簡單,在實際使用時比較難於觀察出來。

矩形摒除法的原理如下:


如上圖,如果在第3列,我們確定數字9只能在B3或H3出現。在第7列,數字9只能在B7或H7出現。則B3,H3,B7,H7構成矩形,符合矩形摒除法的條件。


由上,可以得出數字"9"僅可能出現在 (B3,H7)上,或者出現在 (B7,H3)上


無論出現上面的那一種情況,我們都可以推斷出B行,H行的紅色區域都不能再為數字 9了。

下面舉一個使用矩形摒除法的例子


由C7=3,我們可以判斷在第3列,數字3只能出現在A3和H3。

又第6列,數字3只能出現在A6和H6

由A3,H3,A6,H6形成矩形符合矩形摒除法的條件


由矩形摒除法得到H8不可能是3,又根據C7=3,所以G9=3

6、單元摒除法

單元摒除法是比較基本的排除方法,下面舉例解釋


能確定A8的數字嗎?


由D5=7,得出D8不等於7

H9=7,得出G8、H8、I8均不等於7

顯然A8=7 

7、餘數測試法

所謂餘數測試法就是在某行或列,九宮格所填數字比較多,剩餘2個或3個時,在剩餘宮格添入值進行測試的解題方法。 


我們看B行,B3可能添入的數為5或者6,我們從5開始測試。 


我們在B3添入5進行測試,得到左圖,沒有得出出錯的推斷,所以B3=5可能是正確的判斷,如果能判斷出B3<>6,則才能肯定B3=5。


所以下面我們還需要用B3=6進行測試 

在B3添入6,推出B8=5。


觀察C行,C7,C8,C9必含有數字5。

證明B3=6是錯誤的。從而得出B3=5 

二、候選數法:

1、唯一候選數法

候選數法解題的過程就是逐漸排除不合適的候選數的過程,當某個宮格的候選數排除到只有一個數的時候,那麼這個數就是該宮格的唯一的一個候選數,這個候選數就是解了。


我們可以排除D3為12356789的可能,經過候選數的安全刪除後,D3的候選數變為"4"這個唯一候選數了。

2、隱性唯一候選數法

當某個數字在某一列各宮格的候選數中只出現一次時,那麼這個數字就是這一列的唯一候選數了。這個宮格的值就可以確定為該數字。

這時因為,按照數獨遊戲的規則要求每一列都應該包含數字1~9,而其它宮格的候選數都不含有該數,則該數不可能出現在其它的宮格,那麼就只能出現在這個宮格了。

對於唯一候選數出現行,九宮格的情況,處理方法完全相同

這是製作好的一張候選數表,注意觀察B5,B9,D1


可以看出在第1列,數字9只在D1出現。

在第5列,數字3只在B2出現。

在B9所處的九宮格里,數字9只有在B9出現。

所以“9”是第1列的隱形唯一候選數。

“3”是第5列的隱形唯一候選數。

“9”是A7九宮格的隱形唯一候選數。

所以確定D1=3,B5=3,B9=9

3、三鏈數刪減法

找出某一列、某一行或某一個九宮格中的某三個宮格候選數中,相異的數字不超過3個的情形,進而將這3個數字自其它宮格的候選數中刪減掉的方法就叫做三鏈數刪減法。

三鏈數刪減法的原理如下面圖示


在H行,H2,H5,H7的候選數(12),(23),(13),構成三鏈數,那麼123這三個數在H行將只能出現在H2,H5,H7,那麼本行其它宮格就可以刪除這3個候選數了。這是三鏈數發生在行的情況。


在G7所在九宮格,G7,H8,I9的候選數(12),(23),(13),構成三鏈數,那麼123這三個數在這個九宮格將只能出現在G7,H8,I9,那麼本九宮格其它宮格就可以刪除這3個候選數了。這是三鏈數發生在九宮格的情況。


三鏈數是數對的擴充套件,我們在對上面的三鏈數進行擴充套件,得到右邊的特殊的三鏈數,只要保證在3個宮格內,其包含的候選數也為3個,就都符合我們的要求,比如(123,123,123),(12,12,123)都符合要求。

我們進一步再擴充,發現只要在N個宮格內,其包含的候選數也恰為N個,那麼處理和三鏈數是相同的道理,這樣就形成了四鏈數,比如(12,23,34,14),(123,123,14,1234)等。

甚至可以擴充到五鏈數,七鏈數(雖然在實際解題中作用不大了)。

平時我們用到最多的就是三鏈數,四鏈數了。


在A4所在九宮格,我們看到B4~B6,形成三鏈數,則本九宮格其它宮格就可以去除候選數"2","7","9",這樣就得到C6=4。


同上面完全相同的一副圖,在A行,A7~A9形成由179構成的三鏈數,排除本行其它宮格的候選數179後得到A3=3。

4、隱性三鏈數刪減法

隱性三鏈數是從隱性數對發展而來的。

在某行,存在三個數字出現在相同的宮格內,在本行的其它宮格均不包含這三個數字,我們稱這個數對是隱形三鏈數。那麼這三個宮格的候選數中的其它數字都可以排除。

當隱形三鏈數出現在列,九宮格,處理方法是完全相同的。

我們進一步擴充,在某行(列,九宮格),存在N個數字出現在相同的宮格內,在本行的其它宮格均不包含這N個數字,我們稱這個數對是隱形N鏈數。那麼這N個宮格的候選數中的其它數字都可以排除


在中間九宮格,候選數“2”,“5”,“9”僅出現在E4,E6,F4,形成隱形三鏈數,所以在E4,E6,F4,可以排除其它候選數,得到F4=9。

5、矩形頂點刪減法

矩形頂點刪減法和直觀法講到的矩形摒除法分析方法是一樣的。矩形頂點刪減法在識別時比較不容易找到,所以最好先使用其它的方法。


如上圖,如果在第3列,候選數“9”只能在B3或H3出現。在第7列,候選數“9”只能在B7或H7出現。

則B3,H3,B7,H7構成矩形,符合矩形頂點刪減法的條件。


由上,可以得出數字“9”僅可能出現在(B3,H7)上,或者出現在(B7,H3)上


無論出現上面的那一種情況,我們都可以推斷出B行,H行的紅色區域都不能再為數字9了。可以將紅色的宮格的候選數中去除數字“9”。

舉例說明如下:


在第3列,數字“3”僅在A3、H3出現和第6列,數字“3”僅在A6、H6出現,A3、H3,A6、H6構成矩形,符合矩形頂點刪減法要求,

則紅色宮格應排除候選數“3”

6、三鏈列刪減法

三鏈列刪減法是矩形頂點刪減法的擴充套件,如果不清除矩形頂點刪減法,可以參考矩形頂點刪減法,以便於更容易理解本節內容。

利用“找出某個數字在某三列僅出現在相同三行的情形,進而將該數字自這三行其他宮格候選數中刪減掉”;或“找出某個數字在某三行僅出現在相同三列的情形,進而將該數字自這三列其他宮格候選數中刪減掉”的方法 就叫做三鏈列刪減法。


如果數字“1”可能出現在B行、E行、G行的黃色宮格,則符合“某個數字在某三列僅出現在相同三行的情形”,符合三鏈列刪減法的要求。


則紅色宮格均不包含候選數“1”。


這是前圖的一個變形。其中一行的“1”只能放在這一行的兩個位置。 處理和上圖一樣,紅色宮格均可以排除候選數“1”。

舉例說明:


數字"6"在第2列,第6列,第8列。均出現在A,B,I行。其中在第6列僅出現B,I行,仍然符合三鏈列刪減法的要求。


則紅色宮格均可以排除候選數"6"

7、關鍵數刪減法

在進入到解題後期,利用前面講到的唯一候選數法、隱性唯一候選數法、 區塊刪減法、數對刪減法、隱性數對刪減法、 三鏈數刪減法、隱性三鏈數刪減法、矩形頂點刪減法、三鏈列刪減法都無法有進展的時候,可以考慮使用關鍵數刪減法。關鍵數刪減法就是在後期找到一個數,這個數在行(或列,九宮格)僅出現兩次的數字。我們假定這個數在其中一個宮格類,繼續求解,如果發生錯誤,則確定我們的假設錯誤。如果繼續求解仍然出現困難,不妨假設這個數在另外一個宮格,看能不能得到錯誤。這就是關鍵數刪減法。

關鍵數刪減法的本質是讓我們一個個去測試,逐漸排除不可能的候選數,從而求解的過程。

這種解法就暫時不舉例子了