「セクター」内の START から GOAL までの最短経路を見つけるというプログラミングの課題があります。1 つのノードが START で、別のノードが GOAL であるノードの 2D 配列としてセクターを視覚化できます。他のすべてのノードは FLAT または HILL です。丘を越えて移動することはできません。例えば:
0123456789
|----------| {S = START, G = GOAL, " " = FLAT, # = HILL}
0|S |
1|##### |
2| |
3| |
4| |
5| |
6| |
7| |
8| #######|
9| G|
|----------|
わかりましたので、ダイクストラのアルゴリズムを実装して、S から G への最短経路を見つけました。より短い経路を見つけさせれば、HILL を吹き飛ばすための 5 つの爆弾が与えられます。したがって、私が投稿したセクターの例では、2 つの爆弾を使用して次のようなパスを取得したいと考えています。
0123456789
|----------| {S = START, G = GOAL, " " = FLAT, # = HILL, + = PATH}
0|S |
1|#+### | Blasted away HILL @ [1][1]
2| + | 4 bombs remaining
3| + |
4| + |
5| + |
6| + |
7| + |
8| #####+#| Blasted away HILL @ [8][8]
9| G| 3 bombs remaining
|----------|
プログラムをテストするために指定されたセクターは 100x100 で、厚い「山脈」があるため、爆弾が 5 つしかないので、ゴールなどに直線で爆破することができます。
爆弾を賢く使用するタイミングを計算する方法についてのアイデアはありますか? 現在、「現在見ているノードが丘で、爆弾が残っている場合は、丘を爆破する」という一時的な実装があります。明らかにそれはうまくいきませんが、適切に行う方法が思いつきません。
助けてくれてありがとう。