挖雷的邏輯

2022-02-07 09:52:59 字數 2216 閱讀 8535

掃雷作為策略遊戲,需要遊戲者精確的判斷。現在掃雷高階的官方最快紀錄是33.95秒,中級則是由乙個波蘭玩家保持的8.5秒。而初級紀錄是1秒,世界上很多人達到了這一點。在1秒的時間裡完成初級掃雷,據測算概率在0.00058%至0.00119%之間(屬於運氣題),最可能的方法是直接點選四個角的方塊。而本文所作的事情,則是將雷與雷之間的規律給你揪出來,並且深入思考其中的內涵。讓你以後面對掃雷時,縮短與記錄的差距,戰無不勝!

下圖是乙個初級的雷區,並且標註了兩顆雷的位置,你能將剩下的地雷掃瞄出來嗎?

經過逐一排查,可以很輕鬆的確定雷區中的6顆地雷所在位置:

再來看乙個簡單的「雷區」:

通過逐步掃瞄每乙個方塊會發現:首先最左邊的和最右邊的兩個格仔都一定是地雷,從左數第二個空格子和從右數第二個空格子也都是地雷,由於數字1的關係,從左數第3個格仔和從右數第3個格仔都不是地雷,翻開一定是數字1……這樣一直下去,最後你會發現最中間的兩個空格子,不管有沒有地雷,都和周圍格仔上的數字不符。也就是說這樣的雷區有bug,是無解的。

怎麼判斷乙個雷區是否有bug?又怎麼判斷雷區中地雷的具體位置呢?難道一定要從頭到尾將雷區掃瞄一遍嗎?

其實這些雷區裡其實藏著乙個規律。我們用數學方法來分析了上例的雷區:

在之前提到的這兩個雷區裡,把還沒有翻開的格仔交叉標記上字母x和x』。可以看到:當x的格仔有雷時,x』格仔一定沒有地雷,反之亦然。如果將最左邊的空格子作為輸入,把最右邊的格仔作為輸出,輸入結果和輸出結果一定是一樣或者相反的。如果是相反的,這相當於乙個not(「非」)門電子元件。如果是一樣的,就有趣了,這樣的一片雷區就具備了電路導線的性質!

在這裡,雷區被看成了乙個數字邏輯電路。執行這些「或」、「與」、「非」等邏輯運算的電路則被稱為——邏輯門。任何複雜的邏輯電路都可由這些邏輯門組成。

邏輯門是積體電路上的基本元件。簡單的邏輯門可由電晶體組成。這些電晶體的組合可以使代表兩種型號的高低電平在通過它們後產生訊號。而高低電平可以分別代表邏輯上的真假或二進位制中的0和1,從而實現邏輯運算。具體到掃雷遊戲裡,也就是說,邏輯門可以用於判斷一系列格仔中的地雷的具體位置,而且它如同電路傳導一樣,精確而迅速。

常見的(也是掃雷中用到的)邏輯門包括「與」門、「或」門、「非」門等。將它們組合使用就可以實現更複雜的運算——完成複雜情形下的掃雷,這種方法比按照規則緩慢推進的掃雷方法要節省很多時間。

在簡單的雷區中小試牛刀後,帶著發現的規律,讓我們進行一次實戰演習。下圖是高階掃雷遊戲中的乙個典型的雷區:

你能在不翻開格仔的情況下,直接指出黃格仔中有無地雷嗎? 如果將雷區隨意改變一點——左上角的乙個格仔下移一位,結果又如何呢?

你可能需要考量全域性,從某個點開始逐步推理,將雷區全部掃瞄一遍,才能判斷。而當雷區任意改變一點時,你都要重新來過,才能再次解答。這無疑是一種巨大成本負擔。

實際上我們可以很快速地給出答案:第乙個雷區的黃格仔中無雷。而第二個雷區的黃格仔中一定有雷。

這是怎麼做到的?其實將上述的邏輯門引入到這個複雜的雷區中,一切都會變得簡單而清晰起來。

雷區內靠近邊界、可以直接確定是地雷的位置都插上了標示旗,剩下的位置標上了不同的字母。把乙個有地雷格仔看作1,沒有地雷的看作0。最左面的格仔(u、v)作為輸入,最右面的格仔(t)作為輸出。按照掃雷遊戲的規則,經過一步步推算,它們之間的關係就是:

( u , v , t ) = ( 1 , 1 , 1 ) 或 ( 1 , 0 , 0 ) 或 ( 0 , 1 , 0 ) 或 ( 0 , 0 , 0 )
顯然,這個雷區被歸納成了乙個and門,它不僅輕鬆化解了這個掃雷難題,而且把雷區的規律揭示出來了。如此一來,當你掌握掃雷中這些邏輯門規律並加以練習後,就能夠達到精確、快速的「機械化」掃雷水準。而到那時,乙個新紀錄或許就會誕生了。

將掃雷問題抽象化從而縮短遊戲時間的人,也不僅僅是掃雷發燒玩家。一些數學家也十分關注這個遊戲背後的數學意義。

英國一位數學家用掃雷遊戲中的邏輯規律構建了一系列電子元件,用電子電路模擬雷區。他試圖將乙個的給定的雷區圖案交由計算機來判斷是否可解。如果隨著格仔數量的增加,電腦的計算量增長不是很快,就是p問題,如果計算量增加的很快,就是np完全問題。計算機判斷雷區是否可解,需要這類問題屬於p問題才可以。

對於幾種基本的電路元件(and、or、not),如果將很多個這樣的元件組合起來,相互連線,就會產生很多個輸入、輸出口。判斷最後哪些輸出結果可以產生,哪些不可以產生的這類問題,被稱為sat問題,它屬於乙個經典的np完全問題。

而英國數學家的這個問題在一些時候等同於乙個複雜電子電路的sat問題,也就是np完全問題。由此看來,面對乙個上千上萬個格仔的巨型雷區,不要說去完成所有掃雷任務,就僅僅判斷它是不是可解的,都可能會是計算機也承受不了的的大難題。

挖雷遊戲的概率

程式設計之美最後一題 挖雷遊戲的概率 沒附答案,有一則腳注雲 此題適合matlab使用者解答 頗感有趣.題目說,一局16 16的掃雷遊戲剛開始,只翻開了兩格,分別顯示數字1和2,如下圖所示 只畫出了3 5的區域性示意圖 設地雷總數從10逐漸增加到240,請分別作出圖中a,b,c三處為地雷的概率曲線....

小說的邏輯與反邏輯 小說內部的邏輯與反邏輯

在北京大學的演講 我沒有能力談大的問題,今天只想和老師 同學們交流一點小事,那就是走路。大家都會走路,可以說,走路是日常生活裡最常見的乙個動態。那我們就來看一看,這個最常見的動態在 的內部是如何被描述的,它是如何被用來塑造人物並呈現 邏輯的。為了把事情說清楚,我今天特地選擇了我們最為熟悉的作品,乙個...

邏輯與和邏輯或的過載

和 是c 中非常特殊的操作符 和 內建實現了短路規則 操作符過載是靠函式過載來完成的 運算元作為函式引數傳遞 c 的函式引數都會被求值,無法實現短路規則 所以一般情況下不會過載邏輯與和邏輯或。下面就用乙個案例來分析為什麼不要過載邏輯或和邏輯與。include class test8 bool ope...