私はパズルゲームの洪水を演奏するのが好きです。
https://www.lemoda.net/javascript/flood-it/game.html
それはiGoogleのガジェットとしても利用可能です。その目的は、連続した洪水塗りの最小数でボード全体を埋めることです。
私はこのパズルを最適に解決できるプログラムを書いています。この問題に取り組むための最良の方法は何ですか?理想的にはa *アルゴリズムを使用したいが、残りの手数を推定する関数になるべき機能はわかりません。充填領域を最大にするために深さ4のブルートフォース検索を行ったプログラムを書きました。それは合理的によく働き、パズルを解くので私を倒したが、私はそのアルゴリズムに完全に満足していません。
助言がありますか?前もって感謝します。
ヒューリスティックとして、各ノードが連続した同じカラーの正方形のセットを表すグラフを構築することができ、各ノードはそれがタッチするそれらに接続されています。 (各エッジは1)。その後、パス検索アルゴリズムを使用して、左上から他のすべてのノードへの「距離」を計算することができます。次に、他の5色のそれぞれを使用して氾濫原の結果を見ることで、それがあなたのボトルネックになる可能性があるので、どちらが「最も遠い」ノードまでの距離を最小限に抑えるかを決定します。
その計算の結果をこれまでに行われた塗りつぶしの数に追加し、それをあなたの*ヒューリスティックとして使用します。
ゲームを数回演奏した後、私は良い戦略が常に「深い」に進むことに気付くことが、未解決の領土に遠くにある色のために行くことに気づいた。
A *は単なる優先グラフ検索です。各ノードはゲームの状態であり、いくつかのヒューリスティックに基づいてノードをランク付けし、常に最低限の最終コストノードを拡張します。ヒューリスティックが費用を過小評価していない限り、あなたが見つけた最初の解決策は最適であることが保証されています。
ゲームを数回演奏した後、私は反対側のコーナーにドリルすることを試みることがわかりました、それからすべてのコーナーが勝利をもたらしました。そのため、優れた開始コスト推定値は(これまでのところ費用)+反対側の角に到達するのに十分な数の塗りつぶしです[注意:最小ではありません。ヒューリスティックを計算するために角に貪欲に埋めてください。
現在の色に一致するか一致しない正方形の数を考えることができると思います。したがって、「距離」のヒューリスティックな尺度は、段数ではなく、選択された色と同じ色と同じ色であるボード上の正方形の数になるでしょう。