100個の移動するターゲット間の最短経路を見つけるにはどうすればよいですか?(ライブデモが含まれています。)
バックグラウンド 次の図は問題を示しています。 赤い丸をコントロールできます。ターゲットは青い三角形です。黒い矢印は、ターゲットが移動する方向を示します。 最低限のステップですべてのターゲットを収集したい。 ターンごとに、左/右/上または下に1ステップ移動する必要があります。 ボードに表示されている指示に従って、ターゲットを1回転するたびに1ステップ移動します。 デモ この問題の再生可能なデモをGoogle appengineで公開しました。 これは私の現在のアルゴリズムが最適ではないことを示しているので、誰かが目標スコアを上回ることができるかどうか非常に興味があります。(これを管理したら、おめでとうメッセージが表示されます!) 問題 私の現在のアルゴリズムは、ターゲットの数に非常によく対応していません。時間は指数関数的に増加し、16匹の魚ではすでに数秒です。 32 * 32のボードサイズと100個の移動ターゲットでの答えを計算したいと思います。 質問 すべてのターゲットを収集するための最小ステップ数を計算するための効率的なアルゴリズム(理想的にはJavaScript)とは何ですか? 私が試したこと 私の現在のアプローチはメモ化に基づいていますが、それは非常に遅く、常に最良のソリューションを生成するかどうかはわかりません。 「特定のターゲットのセットを収集して特定のターゲットに到達するための最小ステップ数はいくつですか?」の副問題を解決します。 サブ問題は、前のターゲットが訪問したことについての各選択肢を調べることにより、再帰的に解決されます。以前のターゲットのサブセットをできるだけ早く収集し、最終的な位置から現在のターゲットにできるだけ早く移動することが常に最適であると思います(ただし、これが有効な仮定であるかどうかはわかりません)。 これにより、n * 2 ^ n状態が計算され、非常に急速に増加します。 現在のコードを以下に示します。 var DX=[1,0,-1,0]; var DY=[0,1,0,-1]; // Return the location of the given fish at time t function getPt(fish,t) { var i; var x=pts[fish][0]; var …