第 1 講:數(shù)獨(dú)介紹
各位好。我是小向。從今天我們開始更新文章形式的數(shù)獨(dú)教程。教程內(nèi)容也會(huì)同步更新為 Markdown 文本格式,并保存到我這里的本地。如果有空,我們將發(fā)布到網(wǎng)站上,但暫時(shí)不知道發(fā)布到哪里,所以,歡迎你的繼續(xù)關(guān)注。
另外,我不知道你是否入門數(shù)獨(dú),還是一位數(shù)獨(dú)高手,所以教程依舊從數(shù)獨(dú)規(guī)則說起。
Part 1 數(shù)獨(dú)基本規(guī)則
什么是數(shù)獨(dú)?數(shù)獨(dú)是一種益智游戲,在空格里填入數(shù)字1到9,使得每一行、每一列和每一個(gè)用粗線圍起來的3×3的九個(gè)單元格里,填數(shù)都包含1到9各一個(gè)。換句話說,沒有重復(fù)的數(shù)字出現(xiàn)。比如下面這個(gè)答案所給出的樣子:

可以從圖上看出,每一行、列和粗線圍起來的區(qū)域(稱為宮,Block),都有9個(gè)單元格,并且每一組這樣的9個(gè)單元格都不含有相同的數(shù)字,都是1到9各有一個(gè),不多也不少。這便是數(shù)獨(dú)的規(guī)則。規(guī)則其實(shí)理解起來并不是那么難,對(duì)吧。
當(dāng)然,這里提及一點(diǎn)。規(guī)則里說明的“1到9各一個(gè)”和“不允許重復(fù)”兩者應(yīng)當(dāng)是等價(jià)的說法。換句話說,如果“1到9各一個(gè)”這一點(diǎn)滿足不了,就得有一個(gè)數(shù)出現(xiàn)不止一次,也就違背了“不允許重復(fù)”的條件。所以一般情況下,很多資料敘述的規(guī)則只會(huì)提及“1到9各一個(gè)”和“不允許重復(fù)”的其中一點(diǎn)。
不過我們從規(guī)則里看不出什么比較有意義和實(shí)質(zhì)性的東西,所以這里需要繼續(xù)提及一些內(nèi)容。
1-1?解的唯一性
需要注意的是,每一個(gè)題目都只有唯一的解(Solution)。所謂的解,也就是答案。每一個(gè)合適的題目都必須擁有唯一的答案。換而言之,每一個(gè)空格的填法都只有唯一的一個(gè)。但凡擁有某個(gè)(或某些)單元格出現(xiàn)多出一種填法的話,都算作多解題,這種題目不是合法的。例如上題,就是一個(gè)合格的題目,答案是唯一的;另外,如果一眼就能看到題目所給的數(shù)字不滿足數(shù)獨(dú)規(guī)則,或者是經(jīng)過一部分推理邏輯得到一些填數(shù)并保證這些數(shù)字是正確的填入后,此時(shí)出現(xiàn)不滿足數(shù)獨(dú)規(guī)則的情況,那么這種題目叫無解題,即不可能有解的題目。
實(shí)際上,唯一解的特殊約定并未定義在題目的整體規(guī)則之中,但由于多解和無解題無法找尋結(jié)果,以及大多數(shù)情況下不能完成而沒有意義被排斥,所以唯一解的要求依然被我們算作數(shù)獨(dú)規(guī)則之中,作為一條“潛規(guī)則”,而這條規(guī)則叫做Da Rule,你完全可以認(rèn)為這個(gè)所謂的Da Rule就指的是唯一解的規(guī)則。
如何快速發(fā)現(xiàn)題目是多解的呢?目前尚無比較好的辦法,要么通過做題經(jīng)驗(yàn),要么通過一些經(jīng)驗(yàn)結(jié)論來判斷。經(jīng)驗(yàn)結(jié)論將在“致命結(jié)構(gòu)”的技巧部分內(nèi)詳細(xì)闡述邏輯及其原理,這里不作過多探討。
1-2 錯(cuò)題
如果在做題過程之中錯(cuò)題了,即發(fā)現(xiàn)了行、列和九宮格里出現(xiàn)了重復(fù)的數(shù)字,這個(gè)時(shí)候我們?cè)趺慈ジ恼??一般而言,錯(cuò)題是一件很棘手的事情。只要錯(cuò)題,一般就只有兩種解決方案:第一種是通過回憶做題順序的方式來找到錯(cuò)誤所在地方,然后恢復(fù)到錯(cuò)誤的地方,重新繼續(xù)完成題目(回溯)。不過這種方法實(shí)現(xiàn)起來比較困難,因?yàn)榛厮菪枰蕾囉谟洃涀鲱}步驟,而做題步驟太多,才發(fā)現(xiàn)錯(cuò)誤的話,一般來說都不好解決。我們建議的唯一的方法就是重做此題。
數(shù)獨(dú)是一個(gè)很嚴(yán)謹(jǐn)?shù)倪壿嬐评碛螒颍绻e(cuò)題了,還有一種方法,就是通過局部數(shù)字置換的方式,將一些數(shù)字兩兩交換,來還原題目。不過這種方法有時(shí)候很奏效,但有時(shí)候會(huì)使得情況變得更糟糕。
1-3 教程約定
我們約定,題中黑色的數(shù)字表示用于提示做題的數(shù)字,藍(lán)色的數(shù)字表示經(jīng)過黑色數(shù)字推理得到的填數(shù)。黑色的數(shù)字我們叫做提示數(shù)或已知數(shù)(Given/Hint/Clue),而藍(lán)色的數(shù)字我們叫做填入數(shù)(Input/Modifiable),兩者統(tǒng)稱確定值(Value)。后面的題目的圖片都使用這種配色呈現(xiàn)出來。
不過,有一部分題目在使用之前尚未找到原題目(即無法還原到原題)的話,那么題目里的所有確定值的數(shù)字都將會(huì)被默認(rèn)涂成黑色的。
Part 2 坐標(biāo)表示
我們繼續(xù)約定,本文檔里所有單元格位置的描述和表達(dá)均通過坐標(biāo)(Coordinate)表示。有如下的一些約定。
2-1 行、列、宮表示
我們使用r、c、b和一個(gè)1到9的數(shù)字來表示行、列、宮。數(shù)字是幾,那就是順數(shù)第幾個(gè)。比如r1,就表示順數(shù)第一行;c6則表示順數(shù)的第六列;b4則表示順數(shù)的第四個(gè)宮。其中宮的編號(hào)方式是從左到右、從上到下。
這個(gè)和一般人為理解的邏輯是一樣的,所以這里就不用重新作圖了。
2-2 單元格表示
我們通過rxcy的方式表示一個(gè)單元格(即第幾行和第幾列的交集)。比如r3c2表示第3行第2列。若要表達(dá)某單元格填的是某數(shù)的時(shí)候,可以使用“單元格 = 數(shù)值”的形式表達(dá),比如“r3c2 = 4”就表示r3c2填入數(shù)字4;反之使用“單元格 != 數(shù)值”和“單元格 <> 數(shù)值”均可表示某個(gè)單元格填入的數(shù)字不應(yīng)該是某數(shù),比如“r3c2 != 3”就表示r3c2不應(yīng)填3。
不等號(hào)在文檔里不方便書寫,所以采用計(jì)算機(jī)編程里廣泛采用的“!=”和“<>”來表示不等。
2-3 縮寫
當(dāng)需要描述多個(gè)單元格的時(shí)候,我們可以將相同的部分合并表達(dá)。比如如果需要表示r3c2、r3c3和r3c4的時(shí)候,可以將相同的“r3c”合并,并將不同的2、3、4合并表示,即r3c234;同理合并行也是可以的,比如r3c1、r4c1和r7c1可以表示為r347c1。
當(dāng)合并后還可再次合并的時(shí)候,也可繼續(xù)合并,直到最簡(jiǎn),比如r1c3、r1c4、r3c3和r3c4四個(gè)單元格可以先合并為r13c3和r13c4,但合并后“r13c”是一樣的,所以最終的簡(jiǎn)寫方式是r13c34。更大型的結(jié)構(gòu)同理。
但如果怎么合并都無法表示全部的單元格時(shí),就不需要合并了,我們可以使用大括號(hào)把所有合并和沒有合并的單元格元素表示出來。比如r1c1、r1c3和r3c3三格可以縮寫為{r1c13, r3c3},單元格元素之間約定使用逗號(hào)連接。
更多的合并規(guī)則將在后面講解過程之中逐步說到。

技巧信息
本節(jié)沒有技巧內(nèi)容,所以沒有技巧信息。
名詞解釋
宮(Block):數(shù)獨(dú)盤面的每一個(gè)由3×3粗線圍起來的部分。
解(Solution):題目的答案,也叫終盤。
潛規(guī)則(Da Rule):隱藏在整個(gè)事物內(nèi)部的一個(gè)規(guī)則。這個(gè)規(guī)則一般不會(huì)被正式提出來,但它對(duì)所有這個(gè)事物都滿足這個(gè)規(guī)則。
提示數(shù)、已知數(shù)(Given/Hint/Clue):提示題目用的數(shù)字。在題目最初情況下就會(huì)給出。這些數(shù)字不可修改。
填入數(shù)(Input/Modifiable):經(jīng)過推理得到的題目的數(shù)字。這些數(shù)字在題目得到終盤之前都可以任意修改,畢竟是自己做題過程期間填入的。
確定值(Value):提示數(shù)和填入數(shù)的統(tǒng)稱。有時(shí)候也叫明數(shù)。
坐標(biāo)(Coordinate):一種約定俗成的表達(dá)某個(gè)行、列、宮、單元格的具體位置的機(jī)制。