Graph A*算法与博弈

Graph A*算法与博弈,graph,artificial-intelligence,a-star,2d-games,Graph,Artificial Intelligence,A Star,2d Games,我正在尝试用lisp实现扫雷器解算器。我知道这不是一个罕见的问题,但我没有找到任何文章可以帮助我解决这个问题。开始时,我有一个雷区作为输入,在未覆盖的区域上有数字。算法应该在找到所有地雷后完成。因此,在每一步中,我必须检查哪些字段可以放在我的矿区列表中,并从我的非矿区列表中选择一个字段并打开它。稍后,我将检查是否已完成我的雷区列表,以及是否完成了“是”算法。我将感谢任何帮助。我不要求源代码,但我需要好的想法。我对这种问题没有经验 我必须使用*算法。我不需要打开所有未开封的油田…我需要找到所有雷

我正在尝试用lisp实现扫雷器解算器。我知道这不是一个罕见的问题,但我没有找到任何文章可以帮助我解决这个问题。开始时,我有一个雷区作为输入,在未覆盖的区域上有数字。算法应该在找到所有地雷后完成。因此,在每一步中,我必须检查哪些字段可以放在我的矿区列表中,并从我的非矿区列表中选择一个字段并打开它。稍后,我将检查是否已完成我的雷区列表,以及是否完成了“是”算法。我将感谢任何帮助。我不要求源代码,但我需要好的想法。我对这种问题没有经验


我必须使用*算法。我不需要打开所有未开封的油田…我需要找到所有雷区的位置。当然,要做到这一点,它必须是最短的路径。当我找到所有雷区的位置时,算法就完成了。所以,再一次,我需要找到所有具有最佳开放矿场数量的矿场。当然,我需要一个启发式算法来帮助选择一个安全的未打开字段。
每次打开后都需要确定安全未打开字段的列表。所以我需要调用main函数,该函数将检查我是否找到了所有挖掘的字段,如果没有,那么所有安全的相邻未打开的字段都需要添加到路径列表中。将选择具有最佳启发式的路径

您不需要a*算法;其目的是在图形中找到最短路径(例如地图中两个位置之间的最短路径,或解决难题的最小移动量)。您可能希望使用一种称为回溯的技术


只要有未打开的字段,就选择一个未打开的字段,该字段位于打开的字段旁边,并暂时将其标记为矿山。然后,查看一个未打开的字段,该字段与前一个字段以及打开的字段相邻,并将该字段标记为地雷,如果这与相邻的数字不矛盾,则将其标记为安全字段。继续。最终,您将查看当前区域周围所有未打开的字段,并找到一种可能的方法将字段标记为安全或不安全。但是,这是基于几个猜测,因此现在需要返回到上一个字段,在那里进行猜测,然后进行相反的猜测,然后再次向前移动,以获得另一个可能的标志组合。然后,再往回走,修正你的猜测,等等。这可以通过递归非常灵活地实现。最终,您将拥有一组可能的标志组合。如果可以找到在所有可能的标志组合中都是安全的字段,请打开该字段。否则,请选择一个在尽可能多的旗帜组合中安全的区域。

我在大学一年级时就实现了扫雷器解算器,所以我可以给你一些提示。(这不是使用*算法)

  • 重要-并非所有位置都是可解的

  • 对于较困难的矿井来说,整个回采回溯有点复杂(复杂的需要花费一定的时间,考虑所有可能的情况,在30x30场中放置100个矿坑)。

  • 你可以在本地解决所有问题,就像人类解决扫雷舰一样。这样做的潜力在于给用户一个如何继续而不是解决所有问题的提示

  • 例如:

  • 有一个单独的雷区,你在那里解决问题
  • 找到所有未解决的单元,这些单元具有足够近的已解决(编号/已知地雷)单元(2个单元距离)
  • 对于每一个这样的单元,取一个5x5邻域,以单元为中心,找出每一种可能性(回溯),并检查可能性是否有共同点(地雷/非地雷),如果有,您可以检查地雷并发现非地雷
  • 在你能发现一些东西的时候重复
  • 当你找不到任何东西,而剩下的地雷数量足够少时,你可以尝试在整个矿场上回溯

  • 我希望我记得正确,我做了一些证明,为什么5x5区域足以检查,但那是近10年前的事了。

    +1因为我没有征求意见而不是代码。这是家庭作业吗?A*算法是一种图形算法。你有没有想过如何用图形来表示矿区?