邏輯點點
apk下載鏈接:資源分享匯總
游戲規則:把圓點放進一定的方格中,使得每行每列的圓點數目和所給定的數字一樣,而且圓點按照相鄰的分為一組,分組結果也要和給定的一樣
隱含規則:每一組都是1*n的形狀,一組和另一組是完全相隔的,即一組的圓點不是另一組的圓點的八鄰居
在下面的適當的位置,我依次解釋了5個方法:
方法一:極小數字的處理
方法二:極大數字的處理
方法三:各組互斥
方法四:可選組
方法五:對大組位置的枚舉
(1)
方法一:極小數字的處理
每個格子最終只有2種狀態,放圓點和不放圓點
當一行中已經確定位置的圓點數量達到了該行標定的數字,那么其他格子就都是不放圓點的了,列的話同理。
包括特殊情況:如果數字是0,這一行(列)就直接標注出來不放圓點。
這個看起來沒什么用,實際上關鍵在于已經知道最終狀態的一定要先標注出來,對于后面的工作是有影響的。
方法二:極大數字的處理:
和極小數字的處理同理,當一行中有可能放圓點(包括確定放圓點)的位置的數量等于這一行標注的數字時,這些格子就一定都是放圓點的,應該立刻標注出來,列的話同理。
包括特殊情況:如果數字是棋盤的長寬size,那么這一行(列)就都放圓點。
(2)
(3)
(4)
(5)
(6)
(7)
(8)
(9)
(10)
(11)
(12)
(1)
(2)
(3)
(4)
(5)
(6)
(7)
(8)
(9)
(10)
(11)
(12)
(13)
(14)
(15)
(16)
(17)
(18)
(19)
(20)
(21)
(22)
(23)
(24)
(25)
(26)
(27)
(28)
(29)
(30)
(1)
(2)
(3)
(4)
(5)
方法三:各組互斥
因為各組是互斥的,所以可以確定一些格子是沒有圓點的
為了敘述方便可以分成2種組:
(1)單個圓點構成的組,例如這第(5)關最終會有2個這樣的組
單個圓點構成的組,它的八鄰居都是不放圓點的
(2)n(n>1)個圓點構成的組,如果確定了這組的方向(可能還沒確定該組所有圓點的位置,但是確定了2個圓點的位置即可確定方向是水平還是豎直),那么每個圓點的八鄰居中,不在該組所在行列的6個鄰居都是不放圓點的
這里標注黑色三角形的圓點,它的鄰居中的6個就是不放圓點的,對于超出邊界的自然就是直接忽略了
接下來,按照極大數字的處理:
最后:
(6)
(7)
(8)
(9)
(10)
(11)
(12)
(13)
(14)
(15)
(16)
(17)
(18)
(19)
(20)
(21)
注意,雖然格子的最終狀態只有2種,但是如果是提示的格子,那么除了給子本身之外,還知道鄰居的情況。
其實也就是對《方法三:各組互斥》的拓展。
也就是說剛開始就可以確定的是:
方法四:可選組
如果一行(列)接近完全確定但不能完全確定,可以考慮可選的組的限制
比如這一關,只有1*4的組,沒有1*3的組,所以第4行一定是1*4的組
這里繼續使用《方法四:可選組》,而且要和《方法三:各組互斥》結合起來
現在只剩下2個1*2的組和2個1*1的組
如果第6行是1*2的組那么第1、2行要放3個組,很明顯是無法做到的,
所以第6行一定是2個1*1的組,第1、2行一定是2個1*2的組,而且一橫一豎
這樣答案就出來了,由于對稱性的存在,答案并不唯一
(22)
(23)
(24)
(25)
(26)
(27)
(28)
(29)
(30)
首先還是用方法一二三
方法五:對大組位置的枚舉
考慮最長的那個組怎么放,枚舉所有可能的情況
比如這一關,1*3的組肯定是豎著放,而且在第1列或者第3列或者第6列
如果在第1列或者第6列,根據方法一二三很快就能得到,這是無解的
如果在第3列,根據方法一二三很快就能得到解
至此,4*4的,5*5的,6*6的全部通關。
后面還有更大的棋盤,但是需要的方法我已經總結完畢,無非只是計算量大些。
如果計算量過大,還可以編程解決,我的代碼在我的另外一篇博客中:戰艦系列
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。