我正在尝试在 lisp 中实现扫雷求解器。我知道这不是罕见的问题,但我没有找到任何可以帮助我的文章。一开始我有一个雷区作为输入,在未覆盖的字段上带有数字。当找到所有地雷时,算法应该完成。因此,在每一步中,我都必须检查哪些字段可以放入我的已开采领域列表中,并从我的未开采领域列表中选择一个领域并打开它。稍后我会检查我的地雷列表是否已完成,如果是,算法是否已完成。我将不胜感激任何帮助。我不要求源代码,但我需要好的想法。我没有遇到过这种问题。
我必须使用 A* 算法。而且我不需要打开所有未打开的字段...我需要找到所有雷区的位置。当然,它必须是做到这一点的最短路径。当我找到所有雷区的位置时,算法就完成了。所以,再一次,我需要找到所有具有最佳开放字段数量的矿区。当然,我的算法需要一个启发式算法,这将有助于选择所有安全的未打开字段之一。并且需要在每次打开后确定安全未打开字段的列表。所以我需要调用 main 函数,该函数将检查我是否找到了所有挖掘的字段,如果没有,则需要将所有安全的相邻未打开字段添加到路径列表中。并且将选择具有最佳启发式的路径