windows扫雷游戏原来是一道数学难题!

各位同学大家好,这里是质心数学·游戏·科普频道。

今天和大家聊的是一款有点复古的windows系统自带小游戏——MineSweeper(扫雷)

我刚接触这款游戏是高中的上机课,当时的电脑系统还是win95,在大家还不会局域网互联打StarCraft之前(暴雪出品,必属精品,yeah),能够休闲娱乐的就是扫雷,当空接龙,红心大战等几款游戏了。

童年无网四巨头

这几款小游戏是微软从dos系统过渡到windows系统推广鼠标的系统自带小程序,当时在营销学上也传为一代佳话。如果大家的系统是win10之前的版本,还能通过控制面板,添加程序添加这款游戏,如果是win10,可以在应用商店搜索MineSweeper来添加。

原汁原味的经典版不那么好找

Part.1

扫雷游戏操作非常简单,拿16*30,99个雷的模式来说,鼠标左键点开某一区域,如果是雷,那么游戏失败,如果不是雷,则显示周围8个格子雷的总数。右键则为标记你认为是炸弹的格子,左右键同时按某个格子相当于左键点击周围8个格子非标记的格子。

就这么不断点击和标记,直到找出全部99个雷(打开所有非雷区域),则游戏通关;

你以为的扫雷

但一旦踩中雷,则GAME OVER,需要重新开始。

真实的扫雷

起初,多次开局就踩雷,让我一度认为扫雷是一个运气游戏。直到遇到类似下面情形:

两个问号区域,在边界死角处,只能2选1,不得不去猜雷时,我才坚信这的确是一款运气游戏。

遇到这种情形,我会找来同桌点开,如果没有踩中雷,则双击掌表示是共同的努力,如果踩中雷,就全怪他,我本来想选另外一个的。

当然这些都是玩笑活。不得不承认,扫雷确实是一个需要拼人品的游戏。这个现象与物理学中的“逾渗”现象很类似。

因为是物理现象,所以就不多赘述了

一般人玩扫雷如果总是死太快,就会不断重开重开…直到碰到一个好的开局(然后又快速地死掉)。

那么扫雷开局开出一大片非雷区是好的开始吗?起初一定感觉是这样,但是懂数学的人就会发现:事情没那么简单。

拿99/480的模式来说,开局开出一大片意味着:未开区域雷的密度会上升一个台阶,难的区域在后面。

还有在开疆扩土中,碰到好多1会更好一些吗?我们计算一下,99/480=0.20625,数字1说明,1与一周相邻的共9个格子雷的密度是0.11,那么其余的格子的雷的密度会相对上升,难点还是在后面。

??

所以开出更大的数字也许是个好事情,但若你总能开出8,祝你不要玩到自闭吧。

??

总而言之,从数学的角度我们可以很容易得知,雷的密度越大,也会越难解出来。(这么讲似乎还是跟运气有很大的关系)

Part.2

但今天是教大家用数学方法玩扫雷的,总要拿出点干货,证明运气不好的同学也可以成为扫雷高手。

在大部分情形,我们可以通过严格的计算来完成开疆扩土。比如经典的“121定式”,下图中有雷的一定是两个与1相邻的下面那个格子。

再比如“1221定式”,有雷的一定是两个与2相邻的格子。

在上述两个经典定式中,其实可以通过一些简单的分类讨论可以得到,其相当于解方程组。

比如上述“1221”定式,上述四个格子分别为x,y,z,t∈{0,1}。相当于x+y+z=2,y+z+t=2,x+y≤1,z+t≤1,只能为y=z=1,x=t=0 。由于解只能为0或者1,就可以将上述运算转化为逻辑运算。

哈哈,是不是很简单!掌握了以上核心秘诀,相信你离扫雷高手已经不远了。

Part.3

其实扫雷不仅是一个打发时间(测试人品)的小游戏,还是一种经典的NP问题。英文全称为nondeterminate polyomial(不确定多项式问题)

说人话就是破译密码:容易验证答案是否正确,但是很难正面求解的问题。

与其相对的另外一种问题为P问题,英文为polyomail(具有多项式算法的判定问题)。

扫雷还等价于一种用逻辑运算符¬,∧,∨连结的运算级别为指数级的运算。

这种问题叫做布尔可满足性问题,是逻辑学中一个重要问题,也是当今计算机科学,人工智能研究的核心问题之一,这里就不展开论述了。

当然扫雷游戏中还有很多其他学问,各位同学也可以去研究一下来与我讨论。

在日常生活中,善于发现问题,没有精神时,多玩玩扫雷可能比多喝热水有疗效。最后祝大家早日成为扫雷高手,我们排行榜见吧!

扫雷排行榜 saolei.com.cn