ノードグラフ上を移動するコンピューター制御のクリーチャーがいくつかある単純なゲームシミュレーションをプログラミングしています。彼らはターゲットに向かって行きたいと思っています(たとえば、オオカミがウサギに向かって行きたいと考えています).
クリーチャーが特定のターゲット ノードに直接向かう最速のルートを見つけることができるように、単純な経路探索を既に実装していますが、複数のターゲット (複数のノードにたくさんの食べ物) がある場合は、ヒートマップ グラデーションのようなものを生成したいと思います。オオカミが隣接ノードを照会して、最もホットな隣接ノードに向かうことができるように、グラフ。
グラフ上でヒートマップを生成する効率的な方法を知っている人はいますか? 私が考えることができる最速の方法は、N 回のフル グラフ トラバーサル (N = 食品ノードの数) を実行し、毎回 BFS (または、最も近い/最もホットな未訪問ノード最初のトラバーサル) を各食品ノードから開始して計算することです。グラフの各ノードでその食品ノードからの熱を計算し、1 つのコレクション パスで各食品からのすべての熱を合計します。大きなグラフと多数の食品ノードがある場合、それぞれが多くのノードを持つ多くの完全なグラフトラバーサルを実行する必要がある可能性があるため、私はこれが好きではありません。
私は、すべての食料ノードのオープンセットから始めて、そこから外側に移動する一種の BFS を行うことを考えていましたが、その後、最も近い食料ノードまでの距離のみを計算していました。以前にトラバースしたノードで熱を増加させるために戻ることができないため、食品ノードのクラスターは非常に暑い場所を生成しません (そして、それを許可する場合、基本的に、前の例のようにすべてのノードを N 回訪問します) . たとえば、次から始めると:
F-O-O-O-O-O-O-O-O
| | | | | | | | |
F-O-O-O-O-O-O-O-F
ここで、F は食品、O は空のノードで、食品ノードの熱が 5 で、ノードごとに 1 の減衰があるとします。ヒートマップを次のように表示したいです。
9-7-5-3-1-1-2-3-4
| | | | | | | | |
9-7-5-3-2-2-3-4-5
しかし、BFS スタイルのトラバーサル (どのノードも 1 回しかアクセスできない) は次のようになります。
5-4-3-2-1-1-2-3-4
| | | | | | | | |
5-4-3-2-2-2-3-4-5
誰かがこれを行うためのより賢い方法を持っていますか? 最悪の場合、複数の N 回のグラフ トラバーサルを実行できる可能性がありますが、スケジュールに従って、X 秒ごとに 1 回だけフード ノード トラバーサルを実行します...