は、我々が少ないターン用に最適化A *アルゴリズムを変更します。アルゴリズムは、可能であれば(x + 1、y)または(x-1、y)が好ましくは である(a、b)からANY TILE ADJACENT TO(x、y)までの パスを見つける。
マイ試み溶液:
- 実行元のA *アルゴリズム(B)から(x、y)とします。
- (x-1、)または(x + 1、)が通過するパスの最後の座標を探します。
- その座標平面に*からyまで直線的にアクセス可能な垂直線がある場合は、その線をたどるようにパスを修正します。
ビジュアルデモンストレーション:(Xにアクセスできない場所SからのパスがEに)
......S .....S
. X . X
. => .
. .
E E.
私は私の解決策は、いくつかのケースで働くということはよく分からないが、すなわち:
......S .....S
. X . X
.X ??? X.
. .
E E..
誰もこの問題の解決策を考えることができますか?
注:A *アルゴリズムは、結果のパスのターン数を減らすために、方向変更の回数を因数分解する以外の一般的なものです。
「可能な場合に優先する」とはどういう意味ですか? (x + 1、y)と(x、y + 1)の長さが等しい場合、(x + 1、y)へのパスを見つける必要がありますか?それとも、(x + 1、y)へのパスがあれば、もっと長くても見つかるはずですか?また、隣接はどういう意味ですか? (x + 1、y + 1)は隣接していますか? – btilly
可能な場合に優先されるのは、それがまだ最短経路である場合のみです。隣接には対角線は含まれません。 –
私の友人は次のように提案しました。1.返されたパスが最後にx + 1またはx-1平面を通過するかどうかを調べます。 2. A *を開始から(x + 1、y)または(x-1、y)のどちらかに近づける。結果のパスが短い場合は、代わりにそれを返します。これは今までのテストで正しいソリューションを提供するようですが、基本的にアルゴリズムを2回実行する必要があります。よりエレガントなものがあれば好奇心が強い。 –