如何使用扫雷法
1从一个简单的雷区开始
下图是一个初级雷场,标有两枚地雷的位置。你能扫描剩下的地雷吗?
逐一检查后,可以很容易地确定雷场中六枚地雷的位置:
我们来看一个简单的“雷区”:
一步步扫描每个方块,我们会发现:第一,最左边和最右边的方块一定是地雷,左边第二个空格和右边第二个空格也是地雷。因为数字1,左起第三格和右起第三格都不是地雷。如果你打开它,它一定是1这个数字...这样下去,你会发现中间的两个空格。换句话说,这类雷区存在bug,且无解。
雷区中的两个逻辑门
如何判断雷区有没有窃听器?如何判断雷区地雷的具体位置?我们必须从头到尾扫描雷区吗?其实这些雷区里隐藏着一个规律。我们用数学方法来分析上面例子中的雷区:在前面提到的两个雷区中,用字母X和X '交叉标记未打开的方块。可以看出,当X的网格中有地雷时,X’的网格中一定没有地雷,反之亦然。如果最左边的空白作为输入,最右边的网格作为输出,那么输入结果和输出结果必须相同或相反。如果相反,就相当于一个非门电子元件。如果是一样的,那就有意思了,这样的雷区会有电路电线的性质!
在这里,雷场被视为一个数字逻辑电路。执行这些逻辑运算的电路,如“或”、“与”和“非”,称为逻辑门。任何复杂的逻辑电路都可以由这些逻辑门组成。逻辑门是集成电路的基本元件。简单的逻辑门可以由晶体管组成。这些晶体管的组合可以使代表两种模式的高电平和低电平通过它们后产生信号。高低电平可以分别代表逻辑真值或二进制0和1,从而实现逻辑运算。具体来说,在扫雷游戏中,也就是说可以用逻辑门来判断一系列格子中地雷的具体位置,而且和电路导通一样准确快速。?常见的逻辑门(也用于扫雷)有与门、或门和非门。把它们结合起来,就可以实现更复杂的操作——完成复杂情况下的扫雷,比按规则慢慢推进的扫雷方式节省了大量时间。
3在复杂的雷区中的准确判断
在一个简单的雷区做了一个小测试之后,让我们用发现定律来做一个实际的练习。下图是高级扫雷游戏中的一个典型雷区:
不打开格子能直接指出黄色格子里有没有地雷吗?如果雷区随便改一点——左上角的一个格子下移一个位置呢?
你可能需要考虑全局,从某个点开始一步一步推理,扫描所有雷区后才能判断。而当雷区随意改变一点点的时候,你就要从头再来重新回答一遍。这无疑是一个巨大的成本负担。其实我们很快就可以给出答案:第一个雷区的黄色格子里没有地雷。而且第二个雷区的黄色格子里肯定有雷。这是怎么做到的?事实上,如果把上述逻辑门引入这个复杂的雷区,一切都会变得简单明了。
雷场中所有靠近边界、可以直接识别为地雷的位置都用旗帜标出,其余位置用不同的字母标出。考虑一个有我的网格为1,一个没有我的网格为0。最左边的网格(u,v)用作输入,最右边的网格(t)用作输出。根据扫雷游戏规则,它们之间的关系是:(u,v,t) = (1,1,1)或(1,0)或(0,1,0)或。这样,当你在扫雷中掌握了这些逻辑门的规则并加以实践,就能达到“机械化”扫雷的准确快速水平。然后,一个新的记录可能会诞生。数学家对扫雷的研究?把扫雷这个问题抽象化来缩短游戏时间的人不只是扫雷爱好者。一些数学家也非常关心这个游戏背后的数学意义。?
英国一位数学家根据扫雷游戏中的逻辑规则构建了一系列电子元件,并用电子电路模拟雷区。他试图给计算机一个给定的雷区模式,以判断它是否可解。如果随着网格数的增加,计算机的计算量没有快速增加,那就是P问题,如果计算量快速增加,那就是NP问题。计算机可以判断雷区是否可解,前提是这类问题属于P问题。对于几个基本的电路元件(与、或、非),如果将许多这样的元件组合起来,相互连接,就会产生许多输入输出端口。判断最终能产生哪些输出结果,不能产生哪些输出结果的问题叫做SAT问题,属于一个经典的NP完全问题。英国数学家的这个问题有时等价于复杂电子电路的SAT问题,即NP完全问题。从这个角度来说,面对一个有着上千个网格的巨大雷区,计算机都不忍心判断是否可解可能是个大问题,更别说完成所有扫雷任务了。