作者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