作者etrexetrex (moonet)
看板puzzle
標題Re: [問題] 騎士踩地雷(knightsweeper)002
時間Tue Feb 2 11:03:48 2010
※ 引述《puzzlez (帕索)》之銘言:
: 星期一的沉悶,用一道謎題來打破吧! ‧ ‧
: ‧ ‧
: 請將20個騎士,放入沒有數字的空格裡。 騎
: 盤中的數字,代表有幾個騎士正在攻擊那個格子。 ‧ ‧
: ‧ ‧
: 你能夠像踩地雷那樣,把全部的騎士都找出來嗎? ▲圓點為騎士攻擊之格
: ‧‧‧1‧‧1‧‧‧
: ‧111‧‧1‧‧1
: 1‧‧‧‧‧23‧‧
: ‧1‧2‧1‧2‧‧
: ‧‧‧12‧1‧‧‧
: ‧2‧‧‧‧‧5‧1
: ‧‧112‧‧‧‧‧ 這次一個「0」也沒有哦~咯咯咯……
: ‧‧1‧‧‧‧1‧‧
: ‧‧‧2‧‧1‧‧‧
: ‧‧‧‧‧12‧‧‧
有些格子是無效的格子 不管放不放騎士都不影響
因為他們沒有攻擊到任何一個數字
‧‧騎1‧‧1‧‧騎
‧111‧‧1‧‧1
1‧‧‧‧‧23‧‧
‧1‧2‧1‧2‧‧
騎‧‧12‧1‧‧‧
‧2‧‧‧‧‧5‧1
‧騎112‧騎‧騎‧
‧‧1騎‧‧‧1‧騎
‧‧‧2‧‧1‧‧‧
騎‧騎‧‧12騎‧騎
所以說當我們使用少於20個騎士去滿足所有數字的時候
可以用這些X的位置來補滿20個
找出這些格子是因為這樣才能避免解矩陣的時候遇到無窮多解的問題
定義變數 M(i,j)
M j
0123456789
0 ‧‧騎1‧‧1‧‧騎
1 ‧111‧‧1‧‧1
2 1‧‧‧‧‧23‧‧
3 ‧1‧2‧1‧2‧‧
i 4 騎‧‧12‧1‧‧‧
5 ‧2‧‧‧‧‧5‧1
6 ‧騎112‧騎‧騎‧
7 ‧‧1騎‧‧‧1‧騎
8 ‧‧‧2‧‧1‧‧‧
9 騎‧騎‧‧12騎‧騎
M(i,j) = 0 or 1 ,if M(i,j) 原本是 ‧
M(i,j) = M(i,j) ,if M(i,j) 原本是 1 2 3 5
M(i,j) 不存在 ,if M(i,j) 原本是 騎
定義限制式 每個數字會產生一條限制式,舉例來說
M(0,3)的限制式:
M(2,2) + M(2,4) + M(1,5) = 1
M(5,7)的限制式:
M(3,6) + M(3,8) + M(4,5) + M(4,9) + M(6,5) + M(6,9) + M(7,6) + M(7,8) = 5
用這29個限制式可以排出一個 29 * 59 的矩陣A 跟 29 * 1 的矩陣B
解AX=B
如果X的每一項剛好等於 0 or 1 就是答案
如果不能剛好等於 0 or 1,就要加上限制式
M(i,j) >= 0
M(i,j) <= 1
變成在解線性規劃問題
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.118.9.202
※ 編輯: etrexetrex 來自: 140.118.9.202 (02/02 11:04)
※ 編輯: etrexetrex 來自: 140.118.9.202 (02/02 11:04)
1F:→ EIORU:題目如果可以使用少於20個騎士去滿足所有數字..就不是題目 02/02 11:15
※ 編輯: etrexetrex 來自: 140.118.9.202 (02/02 11:22)
2F:→ etrexetrex:不一定吧 要看題目怎麼出 有機會找到少於20個騎士的解 02/02 11:24
3F:→ etrexetrex:直接解AX = B 是失敗的 因為限制式數量小於變數 02/02 18:44