標籤:

你玩數獨的套路是怎樣的?

我發現業餘數獨愛好者,都有自己總結歸納的拿到題目後一二三步的填數步驟,希望大家共同交流一下


4月4

抱歉,這段時間一直忙,沒有時間深入玩,發現一個關於數獨技巧的網站。覺得很有用,貼出共大家一起交流學習。

獨·數之道 | 數獨愛好者 論壇

=================

3月5

更新說明:答案中所說的方法都是在填出某一個數時,那一刻自己腦海中的想法,可能這個想法並不是最簡的,或者與其他方法本質相同,更有甚者,可能得出結果純粹是偶然。但,不好意思,當時就是這樣想的,我如實記錄而已。

=================

3月3

多圖好吧,估摸著這是個天坑,只能邊玩邊總結,慢慢填了......

先說幾句無關的話,在手機上玩時,我最喜歡的是一個叫熊貓數獨的app。界面乾淨簡單,五種難度等級,十種不同網格模式,共計5000張數獨。有興趣的可以找去廣告版試試。

我玩數獨純粹是打發時間的,所以很業餘,說的不嚴謹還請諒解。

言歸正傳

  • 否定法

對於相對簡單的數獨來說,方法套數什麼的沒意義。從1到9的一遍遍機械地嘗試這是最普遍的方法了。 或者從已存在的數字多的開始,反正就是一遍遍嘗試。注意,我所說的嘗試不是一個一個空格去試數字,而是就已經存在的數字去否定該數字不能存在的地方,即否定法。

舉例如下:

而對於中等困難極難這些難度等級的數獨。這個時候光機械的這麼一遍遍的排除否定,恐怕是完成不了了。這個時候,方法套數才開始發揮作用。

  • 否定法進階之雙重否定

如圖:用否定法(紅色線)排除後,左中小九宮格還剩下(3,4)(3,5)兩個空格可以填"2"。再用否定法(藍色線)可確定中間小九宮格,『2』只能在(5,4)或(6,4)位置,這樣(3,4)就絕對不能填『2』了,所以左中小宮格『2』只能在(3,5)的位置。

下圖同樣也是雙重否定,試試吧~

  • 否定法進階之多重否定

如圖:在中間小宮格中,紅線否定上面三個,所以『7』只能在(4,6)(5,6)(6,6),所以(7,6)不能是『7』;同理,藍色線確定(9,5)不能是『7』;再次,紫線確定(8,4)(8,5)不能是『7』。

  • 行少列補,列少行補;

第7列還差三個數『1』『5』『6』,而通過第5行有『6』『5』

則確定(7,5)位置應該填『1』

下圖第7行少四個數『2』『3』『4』『5』,通過第2列有『2』『4』『3』則可確定(2,7)位置應該填『5』

然後可以否定法與之結合:

。。。。。。挖坑待填。。。。。。

===================================

3月5更新

  • 格內缺,格外補

下圖左上九宮格缺數字「1」「5」「6」「9」

3行1列分別有「9」「6」「1」

所以,相應位置填「5」

  • 行列去除候選

當否定法以及之前的一些方法都讓自己難以再簡單填數之後,該如圖一樣填寫各種可能情況了(很多時候,在填候選的過程中,一些數字就自然而然的對應上位置了,這就沒截圖了)

然後,

當該行或該列如圖紅圈圈一樣,出現相同的兩個數字(慚愧,目前相同三個數字的規律還沒總結出來。),就可以放心去除該行或該列其它格子中紫圈圈裡相同的數字了。

  • 格內去除候選

同理。

  • 雙重否定+情迷第三者

當雙重否定後,出現相同的數字搶對應的兩排,那我們就果斷選擇第三排吧~

  • 格內唯一選唯一,行唯一選唯一,列唯一選唯一(好像是拐了彎的法子,暫寫入)

下面這一圖,在填候選數字時,(4,6)為什麼沒有「2」,我真心想不起來了

至於這圖,當時做的時候,確實用的候選數字在小九宮格內唯一來做的。整理時發現,其實行也唯一,列也唯一。也就是直接用否定法就可以確定啊摔!所以時刻別忘否定法。

基本上,目前我玩的所有數獨,只要肯花時間,運用上面的套路方法,大部分都能解出來。至於接下來那些不得不分情況討論的數獨。等我慢慢玩,再和大家分享吧~


我的套路是這樣的

手繪棋盤加識別

或者直接手機對電腦掃...

數獨求解? - 蕭井陌的回答 - 知乎

數獨? - 蕭井陌的回答 - 知乎

(知乎的新版編輯器根本沒法用,掉了很多次內容了,雖說知乎是運營為王的社區網站根本不在乎程序質量,但是生產內容的工具至少要保證可用性吧)


淡化解法,邏輯為王;

排除為主,標註提示;

線索串聯,全盤觀察;

步步為營,思路連貫;

遇到卡點,檢索遺漏;

碰到難題,尋找鎖鏈;

變型題型,搞懂規則;

標準思路,結合新規;

沒有已知,尋找破點;

手工題目,揣摩聖意;

實在沒招,暴力破解;

完成題目,心情舒爽!


看了贊最多的答主,覺得太複雜了,作為一個數獨愛好者我說下自己的步驟

第一步:二元法

剛拿到的數獨一定有這麼兩個相同的數占著自己的九宮格,並向外延伸霸佔兩條線(紅線),導致另一個九宮格的數只能存在一個確切的位置。

第二步:占行法

當用第一步都做完後,就可以嘗試第二步。

由2的限制可以知道右下的九宮格的2必定處於最右側(綠圈),這同時能反饋到右中的九宮格從而得知右中的2的確切位置。

這種方法適用於當有一個九宮格有3個連續的數字時(即滿行或者滿列),如右下九宮格的 1 8 3.

有時候做完第一步發現沒有滿足第二步條件的九宮格,則可以直接跳到第三步。

第三步:多限制法

這其實是最基本也最重要的步驟,在步驟的循環中需要反覆的使用。

第一步是在同行或者同列的九宮格上排除,這種方法則是通過完全不相干的相同數字排除。

如圖中的三個8一同限制了右中九宮格的8的位置。

第四步:多行排除法

這種方法經常有意想不到的作用。

使用的條件是找到一個位置分布廣泛的數字(如圖中的7)

然後找到快完成卻缺這個數字的一行或者一列(圖中粉紅框的一行)

這時就能用其他的數字7來確定這一行中數字7的位置。

基本以上步奏就能做出大部分中等和簡單的數獨,再加上自己的一些思維就能完成很多。但是我真的碰到過幾次以上步驟解決不了的,同時又沒頭緒,這時我找到了新的殺招。

究極步:極限排除法

使用條件是找到一個周圍數字很多的空格,然後讓各種條件去限制它

如圖紅線,他周圍的數字表明他不可能是 1 2 3 4 8 6 7 9....

所以它絕對是8!

不到萬不得已,沒必要使用這招。That『s all。


先從1到9過一遍,把能填的直接填上,順便把可能性在二選一的格子用小標記備註,會極大提高後面填字的效率,方便記憶。我的習慣是先橫豎,再小九格推。小技巧很多,沒例子說不清楚,自己多玩玩就摸索出來了。最後絞盡腦汁都推不出來的時候就用假設法。原則是不要蒙,不然就沒意思了,要相信沒有解不開的數獨。

最後推薦一個sudoku2的app,很好用。


自邀,看了目前贊最多的答案,覺得只能破解中等難度的數獨,而且方法沒有體系,小白難以操作。

個人推崇候選刪減流(不要問我有沒有這個流派,我隨口一說咯)步驟如下:

1.當你拿一個中等難度以上的數獨時,先把所有格子的所有候選數填出來,這個相比之下委實談不上麻煩,這就是候選咯。

2.接著便是刪減,方法如下。

i)唯一數法(基礎知識)

如果我們發現某個格子中只有一個可用候選數,那麼這個格子必然是這個數字,這就是唯一數法如下面例子,H5格子中只有唯一候選數3

ii)隱含唯一數法(仔細看,這個不一樣)

如果我們發現某一行某一列或某個九宮有一個候選數只出現在一個格子裡面,那麼這個格子必然是這個數字,這就是隱含唯一數法,如下面例子,第3列候選數4隻出現在格子I3中

iii)數對法

如果我們發現某一行某一列或某個九宮有兩個格子只使用了兩個候選數,那麼這兩個格子必然正好是這兩個數字,那麼在這個單元(行,列,或九宮)中,其它格子不會出現這兩個候選數,這就是數對法,如下面例子,第一列中B1和G1的候選數都是7,8;那麼D1,H1中的候選數7,8可以刪除。

iv)三鏈數法

如果我們發現某一行某一列或某個九宮有三個格子只使用了三個候選數,那麼這三個格子必然正好是這三個數字,那麼在這個單元(行,列,或九宮)中,其它格子不會出現這三個候選數,這就是三鏈數法,如下面例子,

最下面中間的九宮中格子H4,H5,I5三個格子都只使用候選數2,8,6;所以G4,G6,I6中出現的8,6都可以刪除

v)四鏈數法(同理上個,沒必要看,可跳過)

如果我們發現某一行某一列或某個九宮有四個格子只使用了四個候選數,那麼這四個格子必然正好是這四個數字,那麼在這個單元(行,列,或九宮)中,其它格子不會出現這四個候選數,這就是四鏈數法;如下面例子中

上面中間的九宮中四個格子A5,B5,C4,C5都只使用了數字1,2,3,4;所以另外4個格子A4,A6,B4,C6中出現的數字1,2,3,4可以刪除

當然還有一些其他的刪減方法,不過有些計算量,一時半刻也說不清,等我能夠簡化表達時再更咯。


按鍵精靈(或者AHK)。

===============================================================

2017.6.15 用AHK重寫了一遍,性能大幅提高,專家模式記錄1:01(這可是那種可以把每一步計算過程都會展示出來的腳本,不是後台運算完了再填上去的腳本哦!開啟後感覺電腦進入瘋狂操作模式,快到看不清)。發現寫這種自動遊戲腳本真的上癮- -

現在的使用方法:

1,從Windows Store下載安裝微軟數獨

2,下載已經編譯好的AHK腳本並運行:AHK_sudoku.exe

3,關閉網路(以避免廣告更新帶來的卡頓)

4,打開微軟數獨,在遊戲設置中關閉Stylus Drawing,並開啟一局新遊戲

5,按F10開始(F11暫停,F12停止)

2017.5.13 閑來無事重構了代碼,各部分用子過程模塊化了,邏輯優化了一下,代碼精簡到300+行,性能翻了兩倍,最新記錄專家模式03:19。代碼貼在下面。有辦法進一步提高性能的請一定私信我- -||

2016.7.17 更新 優化了第三步演算法,刪掉了重複的第二步,代碼擴充到一千多行,expert模式最新記錄7:07
===============================================================

以下為原答案(代碼更新過了):
第一次玩數獨,順手擼出一個按鍵精靈腳本。本以為兩個小時就搞定了,沒想到一下花了兩天時間才完成,最終代碼有700多行,已經可以搞定Microsoft Sudoku絕大多數expert級別的數讀(目前還沒有遇到搞不定的)。數字的讀取用的最基本的FindColor和GetPixelColor。完成一個expert數獨平均用時在10分鐘左右,還有很大的提升空間。拋磚引玉吧。

視頻:

視頻封面論玩數獨的正確姿勢——@許來西—在線播放—優酷網,視頻高清在線觀看視頻

代碼:

F10::

;===============================常量========================================

;系統延時
delayer := 50

;滑鼠速度
SetDefaultMouseSpeed, 0

PixelSearch, left_x, top_y, 0, 0, 1920, 1080, 0xF3C87A, 0, fast ;整張數獨的左上角
If (left_x &> 0 And top_y &> 0) {
} else {
MsgBox, Make sure a new game was started!
Reload
}

PixelSearch, ax, ay, 0, 0, 1920, 1080, 0x5E4416, 0, fast ;第三個方塊的右上角顏色
blocksize := (ax - left_x) // 3 + 1
right_x := left_x + blocksize * 9
bottom_y := top_y + blocksize * 9
halfsize := blocksize // 2

;顏色常量
white := 0xFFFFFF
yellow := 0xE0FDFF
purple := 0xFBE2E4
blue := 0x93691E ;選中一個區塊的時候,區塊左上角邊緣處的深藍色

;用於循環的數組
nine := [1,2,3,4,5,6,7,8,9]
three := [1,2,3]

;第一個方塊的坐標
firstblock_x := left_x + blocksize // 8
firstblock_y := top_y + blocksize // 8

;下方第一個數字的坐標
firstnum_x := left_x + halfsize
firstnum_y := bottom_y + halfsize

;=================================END=======================================

blocktable := {}
for row in nine {
for column in nine {
blocktable[row, column] := new Block(row, column)
}
}

fillednum := [0,0,0,0,0,0,0,0,0]

第一步:
notemode() ;進入note模式

for r in nine {
for c in nine {
PixelGetColor, Getcolor, blocktable[r, c].x, blocktable[r, c].y
If (Getcolor = white or Getcolor = yellow) {
MouseMove, blocktable[r, c].x, blocktable[r, c].y, 0
Click
SendInput 123456789
} else {
blocktable[r, c].notes := [0,0,0,0,0,0,0,0,0]
}
}
}

clear_selection()

第二步:
For number in nine {
MouseMove, (number - 1) * blocksize + firstnum_x, firstnum_y
Click
sleep, delayer
delnote_number(number)
}

notemode() ;解除note模式

第三步:
filled := 0 ;已放數字個數計數器

For r in nine { ;全行判斷
For c in nine { ;一行判斷
If (blocktable[r, c].num = 0) {
MouseMove, x_of_c(c), y_of_r(r)
colornum := 0
for i, note in blocktable[r, c].notes {
if (note != 0) {
colornum := colornum + 1
goodcolor := i
}
}

If (colornum = 1) {
clear_selection()
MouseMove, (goodcolor - 1) * blocksize + firstnum_x, firstnum_y
Click
fill_and_delnote(r, c, goodcolor)
filled := filled + 1
step4_single_number(goodcolor)
}

}

}

}

If (filled != 0) {
Goto, 第四步
}

第四步:
For number in nine {
MouseMove, (number - 1) * blocksize + firstnum_x, firstnum_y
Click
sleep, delayer
step4_single_number(number)
}

Goto, 第三步

;===============================子過程======================================

class Block {
__New(r, c) {
this.x := x_of_c(c)
this.y := y_of_r(r)
this.num := 0
this.notes := [1,2,3,4,5,6,7,8,9]
}
}

notemode() { ;開關note模式
global
SendInput n
sleep, delayer * 2
}

clear_selection() { ;點擊空白處消除數字選中
global
MouseMove, right_x + halfsize, bottom_y
Click
sleep, delayer
}

delnote(r, c, number) { ;某點判斷顏色消除note
global
If (blocktable[r, c].notes[number] != 0) {
MouseMove, x_of_c(c), y_of_r(r)
blocktable[r, c].notes[number] := 0
Click
sleep, delayer // 5
}
}

x_of_c(c) { ; 根據列找x坐標
global
return (c - 1) * blocksize + firstblock_x
}

y_of_r(r) { ; 根據行找y坐標
global
return (r - 1) * blocksize + firstblock_y
}

localize_c(x) { ;定位x的列
global
return (x - left_x) // blocksize + 1
}

localize_r(y) { ;定位y的行
global
return (y - top_y) // blocksize + 1
}

relative(n) { ;定位行或列n的相對行或列
global
relative := mod(n, 3)
If (relative = 0) {
relative := 3
}
return relative
}

delnote_related(r, c, number) { ;傳入方塊,刪除同行同列同九宮格的note
local x1, x2, y1, y2, row, column

;一行消除標記
For column in nine {
delnote(r, column, number)
}

;一列消除標記
For row in nine {
delnote(row, c, number)
}

;九宮格點擊
If (relative(c) = 1) {
x1 := 1
x2 := 2
}
If (relative(c) = 2) {
x1 := - 1
x2 := 1
}
If (relative(c) = 3) {
x1 := - 2
x2 := - 1
}

If (relative(r) = 1) {
y1 := 1
y2 := 2
}
If (relative(r) = 2) {
y1 := - 1
y2 := 1
}
If (relative(r) = 3) {
y1 := - 2
y2 := - 1
}

delnote(r + y1, c + x1, number)
delnote(r + y1, c + x2, number)
delnote(r + y2, c + x1, number)
delnote(r + y2, c + x2, number)

}

delnote_number(number) { ;刪除一頁中所有衝突的標記
local intX, intY, r, c
intY := top_y
While (intY &<= bottom_y and intY &>= top_y) {
PixelSearch, intX, intY, left_x, intY, right_x, bottom_y, blue, 0, fast
If (intX &> 0 And intY &> 0) {
r := localize_r(intY + halfsize)
c := localize_c(intX)
If (blocktable[r, c].num != number) {
blocktable[r, c].num := number
fillednum[number] := fillednum[number] + 1
}
blocktable[r, c].notes := [0,0,0,0,0,0,0,0,0]
delnote_related(r, c, number)
}
intY := intY + blocksize
}
}

fill_and_delnote(r, c, number) { ;填充數字並刪除衝突標記(填充模式進,填充模式出)
global
MouseMove, x_of_c(c), y_of_r(r) ;填充數字
blocktable[r, c].num := number
fillednum[number] := fillednum[number] + 1
blocktable[r, c].notes := [0,0,0,0,0,0,0,0,0]
Click
notemode()
delnote_related(r, c, number)
notemode() ;解除note模式
}

step4_single_number(number) { ;第三步的每個number循環節
local c, r, x, y, already, area_c, area_r, small_c, small_r, colornum, goodcolor, goodcolor_c, goodcolor_c
開頭:
If (fillednum[number] &< 9) { ;每行 For r in nine { MouseMove, left_x - halfsize, y_of_r(r) ;展示進度 colornum := 0 already := 0 For c in nine { If (blocktable[r, c].notes[number] != 0) { colornum := colornum + 1 ; 一行中的紫色方塊個數計數器 goodcolor := c ;一行中最後的一個紫色方塊 } If (blocktable[r, c].num = number) { already := 1 } } If (colornum = 1 and already = 0) { fill_and_delnote(r, goodcolor, number) Goto, 開頭 ;這個數字從頭開始 } } ;每列 For c in nine { MouseMove, x_of_c(c), top_y - halfsize ;展示進度 colornum := 0 already := 0 For r in nine { If (blocktable[r, c].notes[number] != 0) { colornum := colornum + 1 ; 一列中的紫色方塊個數計數器 goodcolor := r ;一列中最後的一個紫色方塊 } If (blocktable[r, c].num = number) { already := 1 } } If (colornum = 1 and already = 0) { fill_and_delnote(goodcolor, c, number) Goto, 開頭 ;這個數字從頭開始 } } ;每九宮格 For area_r in three { For area_c in three { MouseMove, x_of_c((area_c - 1) * 3 + 2), y_of_r((area_r - 1) * 3 + 2) ;展示進度 colornum := 0 already := 0 For small_r in three { For small_c in three { c := (area_c - 1) * 3 + small_c r := (area_r - 1) * 3 + small_r If (blocktable[r, c].notes[number] != 0) { colornum := colornum + 1 goodcolor_c := c goodcolor_r := r } If (blocktable[r, c].num = number) { already := 1 } } } If (colornum = 1 and already = 0) { fill_and_delnote(goodcolor_r, goodcolor_c, number) Goto, 開頭 ;這個數字從頭開始 } } } } } ;=================================END======================================= return F11:: pause F12:: Reload


這是我數獨入門的時候養成的習慣.

1.就是一開始1到9一個一個數字找,就是讀題,把簡單不動腦的檢查先做了,

就是把可能僅有一個數的未知格先填好作為已知條件

玩到"瘋掉"那個程度的時候,

2.先把把每個空格可能的數字都確定好了,

從少數的只有較少的數字可行的空格先開始,設成是一個已知數字的格A,在遵循幾個客觀原則下

(1 九宮內數字1~9僅出現一次,否則空格A的假設不成立

(2 同一行/列內數字1~9僅出現一次,否則空格A的假設不成立

(3 其他未確定的格出現自身可能出現的數字,否則空格A的假設不成立

一邊做一邊自檢,出錯就立刻推倒重做的笨方法.

所以給我一個數獨我就能玩很久很久....

這是一個悲傷的故事,我不知道是多少次對1.無法解決的數獨屈服,才開始的這條漫長的旅程...

我開始2.的時候就會做了,就算全程沒錯,也忍不住一定要做的事

3.糾錯

發現錯誤和糾正錯誤都是必不可少的,承認錯誤和重新開始需要勇氣和耐性.

從來就沒蒙過,因為我心裡明白以我的人品,蒙對的幾率跟室內遭雷劈的幾率是差不多的...


1.前言

一直以來很想把經常用到的一些填數獨的小技巧進行系統地整理,可是又一直懶得排頭。正好這次有閑心,一口氣就先寫到這兒,至於完善嘛,日後再說了。

首先是數獨的規則。數獨的規則其實很簡單,只需要滿足兩個條件:

條件①:每條直線(只包括水平和垂直直線)上只能出現1~9這九個數字。

條件②:每個九宮格內只能出現1~9這九個數字。

2.誤區

在這裡先指出一個誤區。(溫馨提示,這個誤區僅僅是一個很簡單的東西,對於稍微會點數獨的同學來說,就可以自行跳過我班門弄斧的這一段)。話不多說,直接上圖。

如圖,紅色的數字為那個格子中可能填的數字,我記得當年我上小學的時候,總會很自信地在第三個九宮格中從上到下依次填上4和1,不知道為什麼,可能這就是傳說中的迷之自信吧。後來漸漸發現,果然是年少無知不懂事,圖樣圖僧破。像這種幾個不同格子中可能填入的數字還不同的情況,實際應用起來並不好用,還容易混淆,所以一般不多做考慮。

3.感覺很有用的東西

3.1
兩種情況

既然誤區的情況沒有什麼重大意義,那我們就來看看兩種比較有用的情況。其實,所有填數獨的思想也無非就這兩種:

情況①:某一確定的格子,填入其中的數有幾種可能 (確定格子,不確定數)。

如下圖所示陰影部分的格子就可以填入1和2這兩種情況。

情況②:某一確定的數字,一定填入某幾個格子。(確定數,不確定格子)

如下圖所示,在第一列中,能填上3的格子就有灰色陰影這四個格子。

3.2
填數獨步驟

步驟①:標出所有不確定的可能。利用數獨的規則可以確定某些格子中只能填入哪些數,也就像情況①。當然,熟練後這一步通常會省略掉。

步驟②:儘可能多地排除數字或格子的可能。運用做數獨的一些規律和技巧,可以排除一些並不明顯的可能,很多情況下都可以一直排除到確定某個格子中填某個數,這就算是最好的效果。

如圖所示,如情況②中的例子,如果在第七個九宮格中你突然發現了一個2,這樣就可以直接確定陰影部分填1

步驟③:試驗。最後就是根據最後儘可能多地排除可能後得到的結果,把所有的答案都假設帶進去試,如果到後來出現矛盾,則又可以排除一種情況。我承認這樣做很無腦,但確實又不失為一個好辦法。

以上就是我一直以來做數獨的思路,看似很簡單,但真正填起數獨來仍然很難。難就難在步驟②儘可能多地排除可能這一步,因為這一步涉及到有很多的技巧,畢竟數獨技巧的精華就在於此。感覺填數獨有點像轉魔方,技巧就像解魔方時要用到的公式,用了就很簡單,不用的話,哼…那你就轉到明年去吧。都說到這裡了,如果我不繼續往下寫有哪些技巧,那麼前面寫的那些也就沒有任何意義了,所以,,,

4.繼續往下寫

接下來要介紹的所有技巧,都建立在3.1兩種情況之上

4.1
排除一個格子中數的情況(排除數字)

4.1.1
九宮格排除數

如圖所示,在第一個九宮格中,因為一個格子中1-8的情況都被排除,所以陰影格子中的情況只能是9(如此簡單當然不值得一提,同樣,它的使用價值也不是很高)

4.1.2 利用直線排除

如圖所示,如果陰影處只看垂直直線,可能的情況為6.7.8.9,但由於水平直線有7.8.9,所以陰影格子只能是6。(當然,這也簡單得不值一提)

4.1.3
九宮格+直線排除

雖然單是直線排除和單是九宮格排除很簡單,而且也不大實用,但是直線和九宮格合起來就很實用了。

如下圖,如果只看九宮格,陰影格子可以填1.2.3.4.5.8.9,但如果再加上橫豎兩條直線,就只能填9了。

4.1.4
九宮格+直線排除之整體代入

顧名思義,把整體代入的思想運用起來可以排除更多的數。填稍微難點的數獨時,填到中間時段的時候,這個方法也很好用。

如圖,對於灰色陰影部分來說,九宮格中有3.4,直線上有1.2.6,所以可能的情況有5.7.8.9,但又因為綠色陰影部分必填7.8.9,所以灰色陰影只能填上5。

4.2
排除某個數可能出現的格子的個數(排除格子)

當拿到一張81個格子的數獨時,卻只有不到20個已知數字,其餘都得通過推理得出。又因為通過格子排除數字不確定性因素太多,所以一開始用排除格子的方法比較好。

4.2.1 通過九宮格排除直線中的格子

如圖所示,因為第一條直線上必須有一個格子填上3,但又不能在第一個九宮格中,也不能在第二個九宮格中,所以只能「屈居」第三個九宮格中,又因為第三個九宮格中第一排已經有了1和2,所以陰影部分只能填上3。這個方法最開始是高中室友告訴我的,非常實用,屢試不爽。可以說是現在填數獨用得最多的一個技巧。百度也叫它區塊摒除法。

另外這個方法還有個變種這樣也可以直接確定陰影部分的數字,百度叫這個方法為撐點定位法。

4.2.2
通過直線排除九宮格中的格子

如圖所示,陰影部分只能填3,這個方法是後來我發現的,與上面的方法如出一轍,也挺實用。

其實為了對仗工整,此處應該還有4.2.3直線排除直線和4.2.4九宮格排除九宮格,但又因為一個太簡單且不實用,另一個的情況並不存在,所以在這裡也不再贅述

4.3
利用4.2的方法進行4.1的操作

如果通過4.1的方法得出一些數字的可能性,不妨假設那個格子就能就是那個數,然後通過4.2的方法得出矛盾,就可以直接排除那個數字。

如圖,灰色陰影部分可能是3或者5,如果填上3,那麼綠色陰影就必須填上3,如果綠色陰影填上3,則黃色陰影部分就沒有地方填3,所以陰影部分只能填5

4.4
利用4.1的方法進行4.2的操作

如圖,在第一排中有兩個3,可以知道灰色陰影和綠色陰影兩個地方可以填3,但又因為第六個九宮格中有一個3,所以綠色陰影不能填3,就只有灰色陰影填上3。

5.總結與反思

看似每一個例題都能確定一個數字,哈哈,孩子果然還是圖樣圖僧破。在真實的情況中並不可能像理想中那麼簡單。更多的情況是只能排除一兩個可能,仍然不能確定哪個數或者哪一個格子。永遠做好任何一個方法都只能讓你接近成功,並不等於成功的覺悟

凡是用到整體思想的地方,都只能確定整體以外的地方的數,並不能確定這個整體內部如何。而且我總感覺整體思想用得越多,到後面需要試驗的地方也會變得越多,不要問為什麼,都說了只是感覺

每當填數獨遇到瓶頸,用了很多方法都不能確定一個數的時候,還是果斷選擇去試吧。

其實,這些都是一些簡單的技巧,只使用這點方法,要是做一些很難的數獨,還是很傷腦筋,網上也有很多高明的方法供大家參考。

6.參考文獻

百度百科


推薦一款數獨應用。英文名叫sudoku 10000 plus。下面是國內的下載鏈接,或者如果有條件也可以上google play搜下

萬題數獨:Sudoku 10"000 Plus(com.onegravity.sudoku.sudoku10kplus)_2.92_Android遊戲

試了差不多十來個數獨應用之後就留下了這一款,因為一是題目多,難度分級多,適合逐步進階。二是裡面的提示功能相當強勁,可以詳細的告訴你這個解法的名字,原理,例子。循序漸進,非常有助於提高解題水平。

關鍵是結合你正在做的例子,記得非常牢固。

推薦從低一點的等級開始試起,·如果連做三道都能不看提示輕鬆解題的話,就提升到下一個等級。直到某個等級發現解題過程中需要看一到兩次提示,說明出現了你尚未掌握的解題方法,繼續做,等這個等級的題對你也沒難度的時候,恭喜你,你肯定掌握了新的解題方法,進軍下一等級吧。


終於決定獻出知乎上的第一次了~

數獨這項遊戲由於曾被各類雜誌拿來作為讀者互動的項目,具有很高的普及性。幾乎每個人都了解數獨都基本規則。但很多人由於只是單純但把規則當作規則,忽視了其作為一切技巧的原則的重要性。本文的思路是依據數獨唯一也是最基本的規則推導出若干條推論,運用這些推論去拆解數獨,我將舉具體例子來說明這些用法。

本文里的大部分推論其實相信很多人都用過,我在這裡相當於做一個抽象總結的工作,便於在理論上有一定的說服力。文筆笨拙,若行文枯燥,還望海涵。歡迎一切討論和指錯。

-----------------第一次分割---------------------

讓我們從最基本的開始:

數獨的規則:在由9個3x3的小九格組成的3x3的大九格里填上9次1,2,3,4,5,6,7,8,9,使得每個小九格中每個數字各出現一次,每個大九格中的每行和每列上的9個格子中每個數字各出現一次。

該規則是如此的重要以至於我們所有的玩法都是建立在這規則上面的。該規則就好比幾何中的基本公設。因此讓我們來細細研究一下:

首先注意到到是這1-9雖然是數字,但不牽涉到計算。因此這些數字體現到是它們到差別性,換句話說,如果我們用abcdefghi來代替1-9是可以的,我們甚至可以用顏色來代替它們。因為該規則告訴我們的就是小九格中每個格子都不一樣,大九格中每行(以下簡稱「行」)或每列(以下簡稱「列」)上都九個格子都不一樣。由該規則我們將得出兩條推論:

推論1、任何一個小九格中或者大九格中每行和每列上的格子有且只有1-9這九個數字。(完備性)

推論2、任何一個小格子上的數字和與其在同一小九格中或同一行或同一列上的數字全不一樣。(唯一性)

本文所有證明將放在最後,在這裡貼圖說明:

以左上角的1為例,其所在的小九格中沒有其他的1,且1-9都用滿了,對於其所在的行或者列上的情況一樣適用。

由以上兩條推論我們可以得出第三條推論:

推論3、對於在同一豎線(或橫線)上的三個小九格,每個數字將分別在這些小九格中出現各一次,且同一數字不出現在同一列(或行)上。(分配性)

以後證明,目前依舊舉以上圖說明:

以最左邊的三個小九格為例:當1出現在了第一個小九格的最左邊時,1便只能出現在第二個小九格的第二列或第三列。那麼在第三個小九格中,1隻能出現在之前沒有出現過1 的那一列。在擁有以上推論後,我們便可以解出大部分中等難度下的數獨。事實上許多人也正是依靠這些推論和部分自己下意識的衍生技巧解數獨的(但許多人只是沒有刻意去在乎)。而我們也將以這3條推論和基本規則為最初手段開始,通過解具體的一套題,再引出其他的推論。

&<我將先寫到這裡並且把這個回答貼出來,目的只是測試一下上傳到圖片能否顯示&>

&<最終完整的文章也許還會對這些已經貼出對答案進行修改,忘原諒&>


這是我寫的總結

https://github.com/wuzhiyi/Sudoku/blob/master/Sudoku.md


很早之前做的一個思考與整理,雖然不如其他玩家說的專業,也拿出來晾晾吧。

在答題過程中,此題可解的信念是必不可少的。這樣既可以增強答題趣味,也能夠在中途小差錯時及時認清更改方向,而且,會加強追求速度的心情。於是乎,我就在速度的提高中樂陶陶地總結技巧了。百度里的技巧、規律很多也很全,有一些甚至用到了矩陣等高數知識,對於我的半吊子高數水平,還是摸索一套適合自己也行之
有效的方法,更能夠促進解題興趣。

許式技巧適用於特定人群,特徵包括:較強的數字敏感度,較快的心算能力和速度。技巧有靈活應用的需要,而步驟就輕鬆明了許多,不枉這些時日的磨題情緒,總結如下:

步驟一:觀察。一道合格的數字題都是有強烈的邏輯性和完整的內部關聯性。觀察出一道題的題眼,並且不斷根據這個題眼把謎題的未知部分擴大為已知,是解題思路和解題步驟中需要時刻注意的關鍵。

技巧:選已知題干集中的部分開始。

先通過排他性,填入確定數字使其變成已知條件。

簡單看來,在每一九宮,每一橫,每一列中未知數字越少,則是越容易解開謎題的,這是切入點。而隨著數字的填入,對於確定的數字,則把它們當成已知條件,破解出新的題眼。

步驟二:計算。確保每個數字出現九次,不重合,不重複,不同行同列。在每一個九宮,每一橫每一列巡視是,要迅速利用讀數能力,判斷出缺少的數字,並根據獨一性進行排除,計算可能。

技巧:能夠快速在一橫一列一九宮中看出缺少的數字。

每一橫三個九宮,每一縱三個九宮又可以當做小組合一起看。小組合里相同的數字要錯位,即橫排小組合中同一個數字縱向岔開,縱列小組合中同一個數字橫向錯開。

步驟三:猜測。對於不確定的空格,利用題眼的性質進行排他性猜測,假定一個數字進行填格,記住這個空格,繼續填充其他空格。如果正確,則快速完成題干;如果猜錯,迅速換另外的數字。

技巧:尋找選擇性少的空格進行猜測,一般以兩種數字可能為佳。

這麼看來,做一道數獨題的要點就在於,直觀填,快速算,大膽蒙。只要能夠把多種技巧綜合運用,解題速度就會不斷提高,也能在解題中獲得更多的快樂。

時間倉促,總結和評估都不完善,且留字紀念~~


先申明一下我的數獨水平:自寫數獨程序2ms解決最難數獨

以下套路純屬手算競速用:

材料:彩色鉛筆一打(建議8種顏色),橡皮,水筆

大致步驟:

基本方法-蒙-基本方法-蒙-基本方法-蒙-基本方法......

說白了就是兩個演算法的重複運用罷了,不過並不是所有人都知道該怎麼用基本方法,怎麼蒙。

先說基本方法:

按照規則來看其實數獨除了蒙之外只有在極其確定的情況下才會填數。那就講一下什麼叫確定好了。

1.針對某一個數看。檢查是否有一宮只有一個位置出現該數,若有,則填該數;檢查是否有一列只有一個位置可以填該數,若有,則填該數;檢查是否有一行只有一個位置可以填該數,若有,則填該數。從1開始檢測,到9停止。這是第一步。

當然,這個演算法也是有講究的。

在檢測之前,可以先畫一個3*9的表格,3為 行/列/宮,9是指第1-9的規則。用水筆畫。

先檢測單個數。第一步,按行查,初讀數獨盤。目的:檢測行;當行中看到該數,則將改格所在行列宮標記。接著按固定順序,如列宮行進行監測。遇到填過的則標記好檢查下一規則;遇到標記過的規則直接跳過。規則類型內:如果連續檢查9次無改變則視為該規則類型結束。單數內:如果連續檢查3個規則類型無改變是為該數結束。整個方法如果連續檢測9個數無變化則該數結束。

2.針對每個格子看,依舊是旁邊畫一張表,1*n,水筆畫。第一步,從第一個格子看到最後一個格子,可以用鉛筆畫正字的方式統計每個格子內排除掉幾個數字,也可用別的方法,目的是記住該格剩餘候選數數量。將每個看見的只剩一個候選數的格子坐標填入表(棧)中,從下往上填。做完後開始清棧,從上往下清。清的時候先填掉該位置的數,將棧里表示該格位置的數據擦掉,檢測該格同行同列同宮空白格子內剩餘候選數數量,若候選數為一,則將坐標寫入棧內。此方法結束條件為清空棧。

3.以上為基本方法,重複使用,至連續用此兩者方法用不出來為止。此時算結束一遍基本方法。

基本方法完了,現在講怎麼蒙。

蒙的關鍵是,蒙影響力最大的數。第一步找出剩餘候選數最少的格子。此時若出現多個格子候選數數量相同,則計算其候選數價值,價值為9-該數出現次數,選擇擁有單個最高價值的格子蒙。若多個格子價值最高候選數相同,則由第一個格子開始蒙。蒙之前先記號格子位置,以及格內候選數,格內候選數按價值由高到低記好,從價值高的開始蒙。這時就是彩色鉛筆派上用處的時候了。每蒙一次換個顏色,並且用上個顏色標出起始格。蒙的時候判定失敗的方法是發現一個格子沒有任何候選數。如果該蒙法失敗,則擦出當前顏色數字,回到起始格,划去當前可能性,蒙列表中下一個數。如果列表中沒有數,則意味著至少在上一個節點就有問題,回到上一節點,重新蒙。

暫時就先寫完注重速度的方法吧。


第一步,尋找相鄰九宮格相同的數字,在第三個九宮格進行排除標記;

第二步,向上向下向左向右依次進行第一步;

第三步,每個數字進行一遍上述步驟,然後就填完了。

ps我不算是數獨愛好者,一般是周圍同學有人玩但是解不出來會找我幫忙。慢慢的竟然發現目前為止還沒有一道題難住我 感覺填數獨很有成就感。


1.首先把第一眼能推出來的數字寫上;


2.再在剩下的空格里寫出所以可能的數字;


3.然後把第二步中的數字有選擇性地劃掉,畢竟有的數字經過推理會發現不可能出現在那裡;


4.如果還有有爭議的數字,就用最笨的法子,先劃掉一個,推出其他的。如果就此全部推出來,就做完了;如果推到一半發現錯誤,就變相地排除了一個答案。


數獨做多了感覺就是純圖形遊戲,我的習慣是從1開始看,橫豎看一遍把九個格里只能填1的填上,然後再看2依此類推。

看完單個的數字之後你會發現還有好多還沒填上,這時候你就要發揮你的記憶力啦……最好是拿一個鉛筆,比如一行中有兩個格只能填3或7,那說明這一行已經確定有3和7了,在這一行剩下的部分找可以確定的數字(如圖)

還有一種就是三角形和等寬矩形的填法,這種是需要推測的,如果剩餘數字的個數大於2個,那麼用如圖這種方法比較好,如果還剩兩個數字,那就只能用排除法了。


最笨的方法,在所有直觀的空格填好後,把剩下的每一個空格可能的數字全都寫出來,結果就會很直觀


寫了個代碼求解,可以猜測,測試能解決部分sudoku.name上hard++的題目

https://github.com/meolu/sth.writed.4.interest/tree/master/sudoku


今天只講我玩數獨必用的一個思路,幫我節省了很多時間,而且效果還不錯,解題也很快。

說一下我用的APP,以便大家參考。


1.起因

最近因為不想浪費上下班的時間,所以用玩數獨來鍛煉自己的邏輯思考能力,隨著難度逐漸增加,連猜帶蒙的解決方法,已經不能滿足我的需求。

我玩到十幾關的時候,花費的時間已經很高達18分鐘,但是到50多關的時候,我的時間基本維持到4-7分鐘之間。

隨著難度的增加,時間反而縮短了。

這個好的變化得益於我自己就琢磨了一個規律,節省了大量的時間,而且適合任何一道此類型的數獨題,今天在這裡跟大家分享一下。

2.萬變之源:數獨的規則

方法無論怎麼變化,必定是以數獨的規則為根基的,只有把規則融會貫通,才能通過不同的途徑達到同一個效果,快速做完題目。

規則:

在空格內填入數字1-9,使得每行每列每個宮內數字都不重複。

註:填入一個數字需要同時觀察橫向、豎向、和宮,方能保證答案正確,這是我們最重要的規則。

3.連猜帶蒙,不能支持我們進階

隨著難度的增加,空格越來越多,如果還是依靠猜和蒙,不僅浪費時間和精力,而且並不一定能得出正確的答案。

而且對於我們邏輯思維的培養也毫無益處,既然這樣,那就失去了玩這個遊戲的初衷,所以要求變

4.一個思路,可快速切入此類型的所有數獨題

在這裡我重點講的不是方法,而是思路,思路對了,方法才能如虎添翼,為我所用。

思路:拿到數獨題,先依次點擊1-9 查看分布情況,根據已有的數字推算出其它數字的唯一位置或可能的位置。這樣填充一遍,將使我們的數據得到大量的填充。

下面是我以數字2、8為例,當我們點擊「2」時,所有已有的數字全部標黃(APP自動實現),我們就可以根據已有的得出其他未有數字的位置。

根據已知推斷位置,推斷出來的數據又成為新的已知。

當我們依次填充到數字「8」時,我們可以看看步驟,根據第一步,我們進一步確定了步驟二中"8"的位置。而在此之前,我們只能確定大概位置,並不能十分肯定。

這裡有一個小技巧:

在依次填充數據時,一般為三行或三列中有兩個相同的數字,就可快速推算出第三個數字所在的確定位置或大概位置,三行或這三列必須是在完整的九宮格內,不能跨區,可參考上面的左邊的標識。

這就是借力打力,將所有條件用到極致,並不斷創造出新的條件,讓我們的數據飛快地豐富起來。

5.化難為易,進步飛速

現在我們來看看依次填充玩1-9之後的結果吧,效果絕對讓人驚艷,難度等級直線下降。

根據我的方法,可以看到,第一遍填充完花了不到4分鐘的時間,而數據已經大大地豐富了起來,而且很多空格也有了備選項,方便後面選取。

接下來就是掃尾工作了,難度不大,我們選取行/列/宮中空格最少的下手,準確快速完成接下來的空格。

有了這個思路,可以讓我們的試錯成本大大降低,十分準確,還能節省出不少時間。

我用這個思路玩到現在,基本沒有填錯的情況出現,也不用擔心之前的會填錯,給後面造成困擾,因為所有的答案都是根據數獨的規則得出的。

以上只是我近期玩數獨的一點小小心得,剛入門,有不恰當的地方歡迎大家指出來,一起進步。


dancing links


不在格子內寫下可能的數字,靠大腦記憶,絕對不猜,填不粗來就是填不粗來,橫豎再小框,順逆時針1到9都可以,從接觸到現在,懂得的只是基本功夫,對於高難度級別,可以糾結很久,也比較浪費時間哈,本來好好的心情,可以很柳暗花明更快樂,也可以變得很狂躁。


2017年過來補坑

我去年年中趁著無聊實現了程序,然而最終的結果是,部分骨灰級的數獨仍然無法解出來

當然,有些所謂的骨灰級不是唯一解的,那排除法怎麼也不會奏效

對於有唯一解的骨灰級,肯定是存在更深層次的

組合模式,是原來排除法無法觸及的,在新的思路出現前,窮舉法是可行出路(先排除法)

___以下是原答案

作為玩了數獨七八年的人了,雖然說不是一直在玩,但是說起來也玩了將近1000個數獨了。

說說我的步驟吧。

我一開始都是用基本的排除法,普通,簡單級別的都可以解開了,這不多說。

第二步是多重排除法,要結合橫豎的格子來看,並且要做筆記,越往難的做就越需要做筆記,這時候可以做一些高價值的筆記,就是說某兩個或三個小格(在同一個大格里)都在一行里只能填某兩個三個數字,那麼就鎖定了這兩三個小格,感覺沒圖好難說清楚,只能靠多做積累經驗,這種都可以解大部分困難級別的了。

第三步是專門針對骨灰級跟小部分困難級別,我也是最近才摸索到的,這種方法就是分析所有筆記,經過前面兩步以後,如果還剩下一半左右的格子,那就推薦用這種方法,前提是,一定一定要用排除法把能解的都解出來,不然第三步會很難進行。

詳細如下,把所有格子的可能出現的數字都做筆記,字體要寫漂亮點,不然分析的時候就坑死了,記得前面做的高價值的筆記要保留,比如三個格子,只能填,2.6.7,2.6,2.7,顯然這三個格子都已經被267佔據了,那麼 同一大格的其他格子就不要填這幾個數字了。然後就對每個大格,每一行,每一豎進行如下操作。

假如剩下五個格子,出現的可能有,3.4.9,3.5.7.9,3.4,3.9,5.7,那麼就分成兩組,3.4.9,3.4,3.9,和,3.5.7.9,5.7,對於第二組中,把第一組的數字都排除掉,變成,5.7,5.7,這種方法就可以解掉全部數獨了,當然,這種演算法不是窮舉法,而且有很多情況,需要慢慢找,要注意的是,三個格子就需要三個數字佔據,四個格子就要四個數字,一般骨灰級也就能找到三個左右的能進行分組的,完成檢索後,再用第二步多重排除,就能解了,我是有計劃寫這樣的非窮舉法的解數獨程序,只是因為第三步確實太麻煩了,實際情況要更複雜,因為要要求執行第三步前要第二步完全檢索整個數獨。



悄悄的回答一下,嗯....目前為止初二玩數獨1年半

三年級接觸第一個數獨

日常解題就是能寫的先寫(不要腦子的那些)

然後把可能性比較少的不確定數鉛筆標註

小宮,行列剩餘比較少的唯余解掉

接第二步再填掉一些

最後還剩一點就全部鉛筆標註

額,隨便推理一下??嗯完成

(最後一步我貌似很少看套路自己瞎總結)

(好像....大部分總結的東西足夠解我現在所做的數獨了,20-25個數字)

(亂七八糟的方法大概10幾種吧)


最早高中時代迷上掃雷,大學迷上的數獨,最近迷上了「數回」,跟數獨一樣很考驗邏輯思維能力。大家有興趣可以試試,大家切磋一下。《康思數回》評測:充滿數字魅力,愛不釋手的遊戲


來知乎搜索這個問題是因為最近迷上玩數獨,一個數獨需要半小時+的時間,所以來看看有沒有簡單的方法。目前在用的app是這個

我一般玩的是大師級的,其他級別的很容易就看出答案了,覺得沒什麼意思,但是大師級的經常一玩就半小時以上,比較耗時間。

就我自己玩數獨的經驗來看,我認為,邏輯上來說,空格幾乎都可以通過排除法填出來,不需要使用「試錯法」,雖然這也是排除法的一個變種,但是自己去試,然後發現錯了會很浪費時間。

數獨的app有個好處就是你點一個數字他會把格子裡面所有的格子都突出顯示,我一般都是從1開始每個都點一遍,然後按照排除法找出有些單元格必填的數字,這樣掃一遍可以確定一部分數字(沒有突出顯示的可以直接用眼睛掃,可能會混淆,具體的排除方法一般玩數獨的都會用的,不贅述)

接下來有兩種方法,第一種就是把每個單元格能填的數字標記,然後開始某個單元格只能填兩個數字的,「試錯」,運氣好的話,一下子就試對了,運氣不好中間出現錯誤,然後就得用另外一個數字。

第二種方法還是用之前的邏輯,不過這次不是針對每一個數,而是尋找每個小的九宮格或者橫豎行裡面數字較多的,開始用排除法排除,具體怎麼排除這個手機還真不好打出來,鑒於這個遊戲比較冷門,要是以後玩的人多了再補充。 其實我個人想學習的有兩個

1.如何用演算法生成數獨

2.如何用演算法解數獨

3.數獨有什麼解法規律可循嗎?

歡迎交流


做數獨很多小技巧,我的方法是:觀察現有數字哪個最多,例如1最多,然後開始檢查還缺幾個1(一共9個1),查看九宮格哪一格裡面沒有1,按照已有的位置排除法填上;依次類推,再填2,3,4,5,6,7,9其他數字。中間不確定的待定,再用假設法,否定法等小技巧,很快可以填完一個數獨。


我不是很會了


我說我是寫的回溯來解數獨會不會被打(逃)


剛才開始從4格開始玩起,就看每行每列缺什麼,也不會寫小字記起來,玩多了就熟了


不管什麼難度的數獨到我手裡都是一板一眼的解題

從第一宮的第一個空格開始,標記出全部可能的數字,標完一個宮往下或往右標記下一宮。

標的過程就會解決很多空格了,很直觀的感覺就是低級的數獨一般標到5,6宮就能解出所有的空格了,而中等偏高級的一般要等全部標記完略微結合所有的標記才能解出。

示例: 某行共三個空格,標記的數字分別為

(2 7 ) (2 5 7)(2 7),那麼中間那個空格就一定填5.這類的技巧還有一些。

但一般很難的,級別高的數獨,到了所有的空格都標記完了,技巧也用了還是不能明確判斷出答案。因為到了最後正確答案往往就藏在某個有兩個標記數字的空格里。意味著,你離成功只有一步,只能進行試錯,成功的概率為1/2。一開始沒有選對數字,第二遍就選另一個,就OK了。

我解了那麼多的數獨,難易都概莫如是。

這個方法的不足之處就是工程較大,時間較長。但是可以減少試錯,不幸運的話就是最後那一下。另外,這樣解題就只有簡單的排除邏輯,程序般,也應該失去了點解題樂趣吧。

但不得不說,玩了很久的數獨和掃雷後,感嘆越高級的遊戲,到了最後,越靠那1/2的運氣。

簡單的規則,取勝不一定簡單

高級的遊戲,取勝往往靠點語運氣。


玩數獨6年了,很喜歡這種簡致的遊戲。普通九宮數獨其實大多不算難。樓上已經將相對專業的方法講的比較詳實了,那我就談談我玩九宮的小技巧。

每一個數字,其實在每一行,每一列,都只會出現一次。就算該數字一個也沒有給,也只有9×8×7×6×5×4×3×2×1種可能。先從給出最多的數字入手,有時候還可以根據同宮排除。之後我習慣從多到少刷,按行列宮一個個刷。

數獨可能比較重要的還是多練手吧,希望題主可以從中發掘樂趣。


其實玩數獨,玩出來的也不僅僅是數獨罷。

牽一髮而動全局,數獨看似簡單,然而不經意的一枚落子,有可能就改變了整局的命運,可能盤活了整局,也可能終將走向滅亡,而怎麼改變這些因素,怎麼把棋子放在該放的位置上,這些都是相當有講究的,每枚棋子的關係網都錯綜複雜,需要慢慢梳理剝離,如果沒有搞清楚,只能搞砸整個局面。

落子之前,需要分條捋順一個個關鍵節點,明白其中各種複雜關係,這件事情很複雜,也很繁瑣,需要有相當足夠的耐心,捋順之後才能周旋得當,需要在心理預估出任何可能存在的情況,因素變數,然後一點點用事實論證,一點點刪除,最後剩下的那個就是最終的終局。

而要清楚,每枚棋子又都有自己應當屬的位置,作為棋子需要認清時事,也許無法兼顧大局,不過一定要站在應該在的位置上,如果看不清當下的關係環境的話,那就先不要盲目行事,待清晰明朗了之後再行動,才能更加有效。

局面僵持不下,破解不開的時候,就需要一個破局點了,如果用盡各種方式也找不到這個破局點的話,那就是能勇猛果斷的判斷了。然後記得承擔責任,如果判斷錯誤就要承擔整個局面崩潰的結果,當然也要做好挽救危局的準備,不過能不能挽救成功就另說了。不過這時候切忌猶豫不決,一定要穩准狠,下狠心才能辦成事。不過在下狠心之前,也要清楚地估計到可能出現的各種結果情況,才能更好地應對,判斷出現的概率,而不是盲目的下狠心。


排除法 公式什麼的根本記不住


每列每行每個九宮格一個個去排除,難點的一個玩下來要花好長時間。


我想這題應該邀請我們班某數獨國家隊的大神來回答。

畢竟打到過世界第四。


數獨沒什麼套路,基礎的方法倒是有一些,下面列舉一點。

唯一數

  對於初中級的數獨來說,其實都差不多,就是一上來把能填的都填上。最簡單的情況,無非就是某一行、某一列、或者某一宮已經有了8個數字,比如下面例子中的H3格。

  這種情況在中高級的數獨題中幾乎看不到,但在解題的過程中極有可能出現,所以要經常掃一掃全盤,把最容易吃的「甜點」找出來。大部分情況下,你需要結合行和列和宮來一起判斷,比如上例的4列中,乍看之下B4和G4都是二選一,但實際上由於B4所在中上宮中已經存在數字1,所以可以輕鬆判斷B4 = 7,G4 = 1。

  數獨中的每一個數字都同時屬於行、列和宮,因此,並不是一定要在某行、列或者宮中確定了八個數,才有唯一解。比如:

  由B3所在的宮可以得知該方格中可以填入的數字是3,4,5,8。同時,B行已經有8出現,3列也已經有3和5出現,全部排除掉之後,B3可以填入的數字只剩下4,因此B3 = 4。

摒除法

  上面的辦法相當於將數字1-9過一遍,因此效率比較低。所以就有了一些所謂的「套路」,比如行摒除法:

   D行、G行以及I行都出現了數字1,將數字1從這些行中排除掉後就可以確定H2 = 1。

同理,還有列摒除和宮摒除法,如下,具體思路不再贅述。

撐點定位:

  撐點定位可以說是摒除法里的套路,其原理還是摒除,用這個技巧可以提高速度。

  在某宮中如果有某行或者某列的三個數字都已經已知,那麼就可以稱其為「撐」。撐所在行或列上的另外兩宮中的若有數字與撐內數字均不相同,那麼該數字就可以稱作為「點」。撐點定位法的原則是,「點」上的數字在「點」和「撐」之外的九宮格中既不與點同行(或同列),也不與撐同行(或同列)。且「點」上的數字在「撐」所在的宮內與「點」不同行。示例如下:

  以上,數字3、4、9構成了撐,與此同時,它們所在的A行上的另外兩宮中的6就可以看作是點。根據撐點定位的原則可以推斷出,在右上宮中,數字6隻可能出現在A7或A9格中。故A9 = 6。在左上宮中,數字6隻可能出現在B1或B2格,故B1 = 6。

矩形摒除:

  當某個數字可能出現的位置分別在兩個宮,同時又剛好是一個矩形的四個頂點時,便可以該矩形四條邊所在的行列都摒除。 下面的例子中, 左上宮中7可能的位置僅有A3和C3,右上宮中7可能的位置僅有A7和C7,剛好形成一個矩形的四個頂點。

  此時使用矩形摒除法,就可直接將7從這四個頂點所在的A行和C行中摒除。迅速得到B6 = 7。

  在解答數獨的時候,經常遇到無法確定某個格子里的數字,一般來說,把二選一或者三選一的情況標註到方格中有助於快速判斷。

數對

  如果在某一行、列或者宮中,出現有兩個方塊同時具有相同的兩個候選數,則可以將這兩個數同時從其所在的行、列或者宮中排除。數對有時候會在有三個候選數的地方出現,比如下面右圖, 在A行中,數字5和8隻在A4和A7出現過。因此雖然這兩個方格里都有三個候選數,仍然可以將它們作為數對來看。

數集

  數集和數對類似,只不過數字從2個變成了3個,即在某一行、列或者宮中,若出現有3個方塊同時具有相同的3個候選數,同樣,數集方格中的候選數不必須都是3個,有時候某個數字會因為被排除掉而不顯示在方格中。但只要它們是只出現在某行、列、宮中的三個方塊中,便符合條件。如下:

  B行中,B4、B5、B6中的候選數構成了數集,可以將它們同時從該列摒除。此時可確定B2和B3中是一個數對。1列中,D1、F1、H1也構成數集,這裡由於G3的宮摒除而使得數字3不出現在G1方格中,但仍是數集,通過該數集可以確定A1 = 4。

二鏈

  二鏈就是以兩條相對獨立的行或列作為觀察對象,它們之間沒有宮位上的交集。當這樣的兩行中均存在數對,且數對的數字存在交集的時候,如XY和XZ,那麼就就可以判斷在這四個方塊中,X會出現兩次並且不同行(列)。下面是一個示例:

  觀察C行和F行可以發現,數字8要麼出現在3列,要麼出現在9列,因此可能的組合就只有兩種,或者C3 = 8、F9 = 8,或者F3 = 8、C9 = 8。不管是哪種情況,都可以將對應行列上其他空格處8摒除掉,由此可得G9 = 1。

  正如數對可以擴展為數集,二鏈法同樣可以擴展到對應三個數字的三鏈,核心原則是一樣的,感興趣的話可以自己試試看。三鏈法在國際上有個很好聽的名字叫劍魚(SwordFish)。

二鏈進階( XY匹配)

  XY匹配是二鏈進階,它綜合考慮兩個維度而不再是單純的行或者列。當題面出現兩兩相扣的數集(即分別具有xy、yz、xz形態的候選數),且它們不在同一個宮內的時候,就可以應用此套路,示例如下:

  觀察 I2、I9和F9,有兩種情況,一種是I2 = 3,I9 = 5,F9 = 6;另一種情況是I2 = 6,不論哪種情況,都可以斷定F2格不可能是6。結合摒除法便可以得出E1 = 6,G2 = 2。

  掌握XY匹配之後,還可以舉一反三地發現XYZ匹配甚至還能擴展到四個候選數,不多贅述。 數獨的所有套路都是由基本規則演化而來,開始的開始我們使用套路,然後在大量的解題過程中通過思考、歸納,結合自己的習慣而形成自己的招數,最後我們終將忘記套路。

其實呢,玩數獨最重要的是開心(TVB附體)


了解規則,熟能生巧


說到套路……難道不該直接用電腦跑嗎……

今天剛好有朋友說小學二年級題,數獨。這不迅速搞定那數學PhD臉往哪兒擱啊?

於是我默默點開RStudio,

install.packages("sudoku")

library(sudoku)

x&<-readSudoku("F:/sudoku.txt")

solveSudoku(x)

知道這樣就失去了數獨的樂趣了,但是難道這不是最深的裝逼套路嘛……畢竟有package大概10秒以內就能給出答案啊╮( ̄▽ ̄"")╭


用鉛筆,備橡皮


求解下一個數字??並附有解析


一般都是先把一行或者一列少的數字填上,然後由少到多,慢慢就填完了……準確率還蠻高的了……每個人方法不一樣,僅供交流……


還是老師總結的好!

此處有系統性教程(●"?"●)

數獨酷-在線課堂---Powered By SiteEngine


高票答案很不錯。但個人覺得比較適合有數獨基礎的人進階。

我簡單粗暴推薦一個APP吧,比較適合小白入門和提高。

《全民數獨》

它是按2*2,2*2*4,6*6······一點點加大難度直至標準數獨格式。答主當年不知哪根筋抽了,想玩數獨。一個小白一下子面對9*3*3的恐懼你能了解嗎……初看高票答案還是有心有餘悸的感覺T T

最重要的是,這裡面還有專門的套路合集!!

《全民數獨》,長這樣

套路寶典路線:首頁的「幫助信息——「數獨的基本技巧」

簡直是數獨初學者的福音書啊(*/?\*)想要多少套路就有多少套路!

小白答主幸虧機緣巧合上的是它~終於登堂入室漸入佳境,最上癮的時候玩到晚上12點……

最後,廣大擼友保重身體!!


我能說是深度優先遍歷么


先從1到9依次看,一般是看橫三排和豎三排,填上直接能看出來的數,還要在有兩個可能的空格里標出可能的數字,一般難度的靠重複這種方法基本就能填上大部分,然後再看每個小九宮格里缺哪個數字能直接填的填上就好了,不能填上的需要些小技巧推一下填上就好了。

小九宮格里,如果有兩個數字都是有兩個可能,而且都落在了相同的兩個格里,可以把它們當做已知,先推其他空格上的數字。

多做幾個題,摸到自己的心得就好了。


1.先一行一行往下看,缺1格的先填上。也適 用於每一豎,九宮格。
2.然後根據每行、每豎、每九宮格有且只有一個相同數字的規則,大概按照出現次數多少的順序把1-9試一遍。
3.再一行一行往下看,先做空格最少的。同樣適用於每一豎、九宮格。
4.結合2,3兩條填其他的空格。
5.實在填不出的空格,在比較關鍵的空格上猜想。


1. 從9到1,按從行到列再到小宮格的順序把能填的都填了。

2. 重複一遍1。

3. 在只有兩種可能的要塞做一個假設往下填,最後沒問題就是蒙對了。出現問題就是另一個啦!


難度為簡單容易的就不說了,(簡單容易的一般只用肉眼就能填上80%)

中等難度以上的,一般我是先掃一遍,你會發現中等難度以上的圖,1到9已經出來的數字的數量是有不同的(中等難度的圖一般一個數字會先出來5個,最少的1-2個)從出現數量最多的數字開始推,用排除法(即數獨中每個數字在每行每列及每九小格里的唯一性)去排除

然後這樣掃一遍之後再以每行每列去推,也是從數字最多的去推。


難道你們不是使用排除法推出來的?


我一般只玩玩簡單和普通難度。我的方法太簡單了。先看1,所有空格里把1能填的填完
再填2
再填三
再填四
。。。
以此類推,一直填到9,如果還有空格(一般一定會有的),那就再來一遍,不行的話,再來一遍。就這麼周而復始就好了。

其實,數獨是有各種口訣的。手機不好找來,題主再看看其他人的答案吧


先在空的框里填上小九宮裡可能沒有的所有數據,之後進行橫縱檢查和一些簡單推理刪除不可能的數據就OK了。一句話:排除法。


直接上方法~

都比較簡單~

第一個是區域劃分。

比如說

XXX XXX XXX

3XX XXX XXX

XXX 1C8 725

那麼C的位置就一定是3了。

由於左區中行有3,右區下行無3,所以可以簡單的把右區的3認定在上行。不必記錄,直接把上行有3的效果拿來用。

這種形式就可以直接得到,C處就是3的結果。

再來一個~

123 XXX 7A5

456 X8X XXX

7CC XXX XXX

凡是出現這樣的形式。

在同一行/列/九宮格內

2個空僅適應2個數,3個空3個數,4個空……

那麼立刻將其識做一個整體。不用記錄,立刻把效果拿來用。

所以立刻就可以得到A處為8。

我們變一下形~

123 XX6 8A5

SSS X8X XX9

7CC XXX XXX

雖然我們一開始不知道SSS是什麼。

但我們可以看到它們不是8,9,所以它們一定是4,5,6,CC一定是8,9。

我們不必在乎哪個是4,哪個是5,哪個是6,總之中間一行的其他位置都不可以再出現4,5,6。同理,A處為9。


玩通關。瘋狂關也不願意暫記或排除刪,心裡默記練練記性也好。


先掌握一些基本的數獨技巧,比如排除法呀,唯一餘解法呀,數對法呀,百度搜索「胖番茄數獨」,裡面介紹了一些基本的數獨技巧,還有動畫演示,很好理解。另外就是要多練習了,從初級到高級,把學到的技巧靈活應用。


先1~9過一遍,能填的填,不能填的也知道大體位置了,記住位置之後再從頭過一遍。兩遍之後一般平均每個宮能空三個左右,在看整體,結合之前記住每個數的大體位置,一排除。就完事兒了。這是困難的題目。

簡單的直接整體看兩遍就可以了


掃完全題。腦袋開始暴力多線程暴力破解。不過有時候會死機。一般我都終結進程。重啟一次。


淡化解法的概念,形成自己的解題套路,遇到卡點,先找自己的弱點,把握全盤,不忘空白


篩選法啊(⊙o⊙)然後難度大的排除法


1/和大家的差不多,由1開始看,把能推出來的填上,我自己取名叫【狙殺】,直到9。然後,再看一遍,因為你填了一些數字進去,可能把之前不確定的數字排除了。

2/找九宮格中數字最密集未填數字最少的宮或行列,把未填格的可能數字填進去,這個過程一般會填出幾個數字,前提是這是中等偏下難度的。

3/繼續第一種方法,我的原則是,只要填出新的數字,就【狙殺】,屢試不爽。

4/陷入困局,這是每個愛好者最頭疼的時候,當然,這也是數獨最有趣最迷人的時候,柳暗花明又一村的感覺,不說你懂得。這時候就需要你認真仔細了,運用各種方法技巧,檢查一遍,這些方法技巧我也叫不上名字,反正玩的多了,你也就會了,會了就不管它叫什麼了。

5/一般難度的,上面這些步驟你應該就做出來了。實在做不出來的,就只能假設了,把所有未填格的可能數字填入,找個數最少的開始,選一個開始假設,……

6/我也是個新手,我之所以玩這個,是因為想碾壓前女友,想超越她,目前還在努力中


需要先把握住數獨的關鍵在於數字,1-9是不是你都了解了

一、簡單一點的數獨,光靠排除和數數字基本就可以確定了

1、從1-9 one by one的來選擇他們的位置,新學者當然會選擇您能看到最多的數字開始,從哪個開始不重要,重要的是一個不漏,並且可以重複這樣好多次,因為每填上一個格子就代表可能性就有改變。注意三行三列的分清楚,小九宮格里數字不重複一定要謹記。

2、然後一行一列的排除,這種方法不管用的時候,每行每列每個小九宮格的觀察,觀察他們都缺了幾個數字,如果缺一個那麼很顯然,從1-9數一遍就知道少了哪一個了,如果缺兩個那就看看是哪兩個,再從行或者列中找找有沒有可排除的,這個步驟叫做數數字。

3、無法進行了再重複1的步驟,再來2,基本上大部分數獨這樣均可有解

二、稍難一些的基本都是到了中後期無法判斷,並且無法判斷的都是相關連的格子里的數字

1、這個時候帶個數字進去檢驗一遍是最好的,但是很容易在這一步弄混了哪個是你猜測的,哪個是已經解答出來的,需要用標註或者不同顏色的筆區分好了。

2、如果在遇到模稜兩可,記住一定是「兩可」不是虛值,而是兩個難以判斷其一的情況下,帶數字進去,如果帶完無法驗證正誤,則繼續做下去要是做不下去或者發現已經有錯,就代表剛剛帶的數字是錯誤的。

3、上面這樣的辦法是笨了一點,但是只有這樣慢慢練才能找到感覺,而且精髓所在就是1裡面提到的排除法和數數字了,只是高手用的眼花繚亂,新手都不一定能數的清楚。

三、骨灰級難度的,建議不是骨灰級玩家就不要去玩了,畢竟浪費時間的方法有很多種,這種也不一定是最好的。

四、最後我個人比較喜歡殺手數獨,相對於一般的專門用來給人燒腦的數獨而言,他的變化更加多端,很有意思!


在手機上玩過一段時間,現在說說吧,在手機上玩很討厭的,它的答案是唯一的,你選的不對,那麼這個數就填不了,然後有三次提示的機會,有三次出錯的機會,三次過了還要玩就要用鑽石了,鑽石是過關獎勵和買的。大致就是這樣,體驗和差,比如說,你在報紙上玩,有些位置你要到最後才發現不對,然後重新推倒,再填的,這就是樂趣啊。哪有說你填一個就告訴你對或不對的呢!所以說體驗很差。


推薦閱讀:

你是如何一步步成為數獨高手的?
數獨是怎麼設計的?

TAG:數獨 |