不用猜的扫雷(无猜扫雷)

本站的每一盘都能只靠逻辑扫完。下面说说什么叫“被迫猜”、普通扫雷为什么会有那么多,以及这里的每一盘是怎么生成、怎么证明的。

普通扫雷为什么会逼你猜

经典扫雷的雷是随机摆放的。随机摆放经常会造出任何技术都解不开的局面:两个未翻开的格子,中间只有一颗雷,而每一个碰到其中一格的数字,也以完全相同的方式碰到另一格。不管你翻哪一个,都有 50% 的可能输掉。玩家们管这叫“50/50”,也就是二选一。

这种情况有多常见?我们生成了大量第一下安全的普通随机盘,交给我们的求解程序去推。随机初级盘大约有 91% 碰巧不用猜,中级大约 65%,高级只有大约 14%。也就是说,在高级上,一盘随机盘多半至少要猜一次——而且常常是在你认真推了好几分钟之后、快到结尾的时候。

对喜欢推理的人来说,这是普通扫雷最让人沮丧的地方:输赢的最后一步交给了运气,前面的所有努力都可能白费。无猜扫雷要解决的就是这一点。

  • 未翻开
  • ✓可以放心翻开
  • ⚑一定是雷
  • ⚑已插旗的雷
  • 1看这里
  • ?只能靠猜

一个真实的 50/50

两个标着 ? 的格子里一共只有一颗雷。那个 1 和那个 3 都同时碰到这两格,而且没有别的数字碰到其中任何一格。没有任何数字能把它们区分开,想继续只能猜。这样的盘面在本站永远不会出现。

每一盘是怎么生成的

你点下去之前,盘面上什么都还没摆。你点的第一格和它周围的 8 格会被留空,其余的雷随机撒在剩下的格子里。然后求解程序从你点的那一格开始,像一个细心的玩家那样把这一盘推下去——它从来不看雷实际在哪里。

如果求解程序走到一个既证明不了任何格子安全、也证明不了任何格子是雷的局面,就说明这一盘会需要猜。这时生成程序不会把整盘扔掉重来,而是在那些还没确定的格子之间挪动一颗雷——绝不动求解程序已经推出来的格子——然后让求解程序接着推。已经翻开的格子和已经证明的雷都留在原处,所以到目前为止推出来的一切依然成立。这样反复,直到求解程序能翻开所有安全格。

最后,整盘做好之后,还会从你的第一下开始、从头再完整解一遍,确认它真的不需要猜。只有通过了,才会给你看。这一切只要几毫秒——在笔记本电脑上,一盘高级平均约 3 ms——所以你一点下去,盘面就出现了。

求解程序能知道什么

求解程序只用你看得见的东西:已翻开格子上的数字、它已经证明是雷的格子,以及雷的总数。它分三步推理。第一步,看单个数字:一个数字的雷已经全部找到,它其余的邻格就安全;一个数字周围未翻开的格子数正好等于还缺的雷数,这些格子就全是雷。第二步,看两两比较:把两个有重叠的数字放在一起比,1-2-1、1-2-2-1 这类定式就是这样解开的。第三步,完整穷举:对边界上每一段相连的区域,试遍所有可能的雷位摆法,再结合剩余雷数,只有在所有摆法里都成立的结论才会被采用。

最后这一步是完整的——如果连它都确定不了任何一个格子,那这个局面就真的需要猜。为了确保求解程序永远不会得出错误的结论,它有自动化测试保驾:在 400 个随机小局面上,把它的结论和暴力穷举所有雷位的结果逐格对比,每一次都完全一致。

技术还是那些,只是不再抛硬币

无猜并不意味着简单。盘面保留了经典的尺寸和雷数,求解程序也允许使用很深的推理,所以你可能需要同时比较好几个数字,或者数一数剩下的雷,才能找到下一步。改变的是“输”的含义:输了,一定是读错了某个数字或者手滑点错,绝不是运气不好。

还有一点很实用:如果某个局面看起来像 50/50,那它就一定不是——盘面的某个地方还有一步推理在等着你。这会让你在卡住时更有耐心去找,而不是随手点一下碰运气。

常见问题

什么是无猜扫雷?

每一盘都保证只靠逻辑就能扫完的扫雷。你永远不会走到必须在几个格子之间随便挑一个的局面。

无猜会让扫雷变简单吗?

盘面的尺寸和雷数都和经典扫雷一样,所以对推理的要求一样高。它去掉的是运气,不是难度。

怎么知道一盘不需要猜?

求解程序从你的第一下开始,只用玩家看得见的信息来推这一盘。只有它能翻开所有安全格,这一盘才会给你;做好的盘面还会再从头解一遍来确认。

无猜模式下第一下安全吗?

安全。盘面在你第一次点击之后才生成,那一格和它周围的 8 格一定没有雷。

所有难度都是无猜的吗?

是的——初级、中级、高级和每日一盘都用同样的方式生成。