1. 程式人生 > >數獨高階技巧入門之三——Fish

數獨高階技巧入門之三——Fish

術語Fish代表了一組工作原理相同的關於特定候選數的解題技巧(Fish技巧直接產生自數獨規則——每個單元內的數字都不能重複),Fish家族成員包括“體型”從小到大的X-Wing、Swordfish、 Jellyfish、Squirmbag、 Whale以及Leviathan(後三者在人工解題過程中很少用到,本篇不做展開),以及由標準Fish結構延伸出來的Finned/Sashimi Fish。

X-Wing——若數字A在某兩行(列)中只能存在於相同的兩列(行),則這兩列(行)的其他格都不能有A。

其原理很簡單,如圖1所示,我們將數字A只能存在於兩個位置的行(列)稱為base集(黃色),把與之垂直方向的列(行)稱為cover集。顯然,根據數獨規則,在Base集中要嗎是紅色的一組A成立,要嗎是藍色的一組A成立,無論哪個顏色的A成立,都可以相應刪去cover集行或列中其他格(橙色區域)的數字A。在具體操作時,大家可以將步驟簡化為,在數獨盤勢中尋找一個數字A的2行×2列的矩形,若A在某個方向(橫、縱)的行、列中只能出現於兩個位置,就刪去與之垂直方向的行、列中其他格的數字A。

  圖1 X-Wing01

​來看下面的例項。圖2中數字5在R2和R5行中均只能存在於C5和C8列,則R2和R5的5構成Base集, C5和C8列的5為cover集,可刪去cover集其他格中的的5(紅色)。

  圖2 X-Wing02

​圖3中數字1在C1和C5列均只能存在於R2和R5行,base集=C15{1}, cover集=R25{1}, 可刪去cover集其他格中的1(紅色)。

  圖3 X-Wing03

​Swordfish——若數字A在某三行(列)中均只能存在於相同的三列(行),則這三列(行)的其他格都不能有A。

  圖4 Swordfish01

​本篇開頭已經提到,Fish家族的解題技巧都有著同樣的工作原理,只是“體型”大小不同。X-Wing是2行2列2×2的矩形,Swordfish則將其擴充套件到3行3列。如圖4中,黃色行列為base集(數字A在該單元僅能出現於3個位置),與之垂直的方向為cover集。根據數獨規則,數字A在這個3行3列的矩形中,必然是每行每列出現且僅能出現1次,故可刪去cover集中其他格內(橙色區域)的A。

需要注意的是,在Swordfish結構中,base集每個行列的A未必要出滿3個位置,如下圖,只要滿足3行3列,且base集中的A在垂直方向只能出現於cover集內,依然是有效的Swordfish結構(其他Fish結構同樣如此)。

  圖5 Swordfish02

​來看兩個Swordfish的例項。

  圖6 Swordfish03

​圖6中,數字2在R2、R3和R9中(base集),均只能出現C1、C5和C8列(cover集),則可刪去cover集其他格內的2(紅色)。

  圖7 Swordfish04

​圖7中,base集=R247{4},cover集=C235{4},可刪去cover集紅色的4。

Jellyfish——若數字A在某四行(列)中均只能存在於相同的四列(行),則這四列(行)的其他格都不能有A。

Jellyfish進一步將Fish結構擴大到4行4列,我們直接看例項。

  圖8 Jellyfish01

​圖8中,數字7在R3、R4、R6和R7(base集)中,只能出現於C1、C2、C5和C9(cover集),可刪去cover集其他格的7(紅色)。

  圖9 Jellyfish02

​圖9中,base集=R1367{7},cover集=C2589{7},刪去cover集其他格內紅色的7。

Finned/Sashimi Fish

大家都知道六書中有“指事”一法,“指事者,視而可識,察而見意”, 如“刃”字是在“刀”的鋒利處加上一點,以作標示;“凶”字則是在陷阱處加上交叉符號以作提醒。數獨解題技巧中的Finned/Sashimi Fish與造字法中的“指事”有著異曲同工之妙。我們來看一個例子:

  圖10 X-Wing

上圖是一個標準的X-Wing結構,可刪去C3、C5中紅色的9。但是,如果X-Wing這條魚在base集多出來一條鰭(fin)怎麼辦,比如在R2C1格中加上1個9,變成圖11這樣:

  圖11 Finned X-Wing

我們可以這樣推導:1)如果R2C1中多出來的9不成立,則局面變為圖10中的標準X-Wing結構,可刪去R3C3、R5C3、R5C5中的9;2)如果R2C1中的9成立,則可刪去與之同一單元的R2C35、R3C3中的9。結合上述兩種可能,可以發現,無論R2C1中的9是否成立,都可以刪去R3C3中的9

直觀來看,多出來的fin將Fish結構cover集的刪減範圍限制在它所在的宮中,起到了“指事”法標識、定位的作用,我們把這種多長了鰭的Fish結構稱為Finned Fish。

再開看一個Finned/Sashimi X-Wing的例子:

  圖12 Finned/Sashimi X-Wing

​圖12中C3和C6為base集,R3和R7為cover集,C3列R89中的兩個3為fin(大家需要注意,雖然本例的X-Wing中,若去掉R89C3的兩個3之後,C3列可以直接出數,但它仍是個標準的X-Wing結構,因為它嚴格符合X-Wing的定義:數字A在某兩行、列中只能存在於相同的兩列、行。我們把類似這種base集中某個位置已有確定的其他數字填入——即原有的Fish少了一部分的結構稱為Sashimi Fish)。可刪去fin與cover集共同作用格亦即本例中R7C1格內的3。

下圖是一個Finned Swordfish的例子,base集=C159{7},cover集=R357{7},R1C9的7為fin,可刪去fin與cover集共同作用格R3C7內的7。

  圖13 Finned Swordfish

​下圖是一個Finned/Sashimi Swordfish結構(注意本例的情況與圖12相似),base集=R269{2},cover集=C258{2},R6C4的2為fin,可刪去fin與cover集共同作用格R45C5內的2(紅色)。

  圖14 Finned/Sashimi Swordfish

最後在文末提供一個Finned/Sashimi Jellyfish的盤勢供大家揣摩。

  圖15 Finned/Sashimi Jellyfish01

作者:零時四分_719b
連結:https://www.jianshu.com/p/ccf42a052af4
來源:簡書
簡書著作權歸作者所有,任何形式的轉載都請聯絡作者獲得授權並註明出處。