Lisp でマインスイーパ ソルバーを実装しようとしています。これはまれな問題ではないことはわかっていますが、それを解決するのに役立つ記事は見つかりませんでした。最初に、カバーされていないフィールドの数字を入力として地雷原を持っています。すべての地雷が見つかったら、アルゴリズムを終了する必要があります。したがって、すべてのステップで、マイニングされたフィールドのリストにどのフィールドを入れることができるかを確認し、マイニングされていないフィールドのリストから 1 つのフィールドを選択して開く必要があります。後で、マイニングされたフィールドのリストが完成しているかどうかを確認し、はいの場合はアルゴリズムが完了しています。助けていただければ幸いです。ソースコードは求めませんが、良いアイデアが必要です。私はこの種の問題を経験していません。
A* アルゴリズムを使用する必要があります。そして、未開封のフィールドをすべて開く必要はありません...採掘されたすべてのフィールドの位置を見つける必要があります。そしてもちろん、それを行うには最短のパスでなければなりません。採掘されたすべてのフィールドの位置を見つけると、アルゴリズムは終了します。したがって、もう一度、最適な数の開かれたフィールドを持つすべての採掘されたフィールドを見つける必要があります。そしてもちろん、すべての安全な未開封フィールドの 1 つを選択するのに役立つアルゴリズムのヒューリスティックが必要です。そして、開かれていない安全なフィールドのリストは、開くたびに決定する必要があります。したがって、メイン関数を呼び出す必要があります。その関数は、マイニングされたすべてのフィールドを見つけたかどうかをチェックします。そうでない場合は、すべての安全な隣接する未開封のフィールドをパスのリストに追加する必要があります。そして、最良のヒューリスティックを持つパスが選択されます