【发布时间】:2013-04-11 19:24:16
【问题描述】:
我正在尝试制作扫雷求解器。如您所知,有两种方法可以确定雷区中的哪些字段可以安全打开,或者确定哪些字段已被开采并且您需要对其进行标记。第一种确定方法很简单,我们有这样的事情:
如果(X 附近的地雷数量 - X 附近当前发现的地雷数量)= X 附近未开垦的田地数量 then X 周围所有未开垦的田地都被开采了
如果(X 周围的地雷数量 == X 周围当前发现的地雷数量)则 X 周围所有未打开的字段均未开采
但我的问题是:当我们找不到任何已开采或安全的场地并且我们需要查看多个场地时,情况会怎样?
http://img541.imageshack.us/img541/4339/10299095.png
例如这种情况。我们无法使用以前的方法确定任何内容。因此,对于这些情况,我需要算法方面的帮助。
我必须使用 A* 算法来做到这一点。这就是为什么我需要所有可能的安全状态来进行算法的下一步。当我找到所有可能的安全状态时,我会将它们添加到当前最短路径中,并根据启发式函数对路径列表进行排序并选择下一个需要打开的字段。
【问题讨论】:
-
你可以避免写算法,让计算机自己学习,但我不能告诉你更多......:/
-
我不明白您提供的示例图片。最左边的“2”表示左边第二行的两个字段都被挖掘,但第二个“2”表示只有其中一个被挖掘。这会在什么游戏背景下出现?您是否认为游戏的信息可能相互矛盾?
-
但是您可以使用您的算法在该图像中找到一个安全字段。取2个包围的2个;两者周围的地雷数量等于目前在两者周围发现的地雷数量。因此,您可能会发现其上方的空白字段。或者,您的意思是,如果您的该字段尚未标记任何标志,您怎么知道要标记这两个标志?
-
左右两侧未打开的字段较多。在左侧添加一列未打开的字段,在右侧添加一列,您就会明白。
-
我认为您不会找到涵盖所有情况的一小部分规则,因为与未覆盖瓷砖相邻的一组覆盖瓷砖与下一个未覆盖瓷砖相邻的一组瓷砖相交, 等等。您可能必须通过一长串重叠的瓷砖进行推理,以便在不猜测的情况下做出正确的动作。一般来说,这是约束求解器的工作,从头开始实施并非易事。
标签: algorithm minesweeper