6

A *のアルゴリズム/擬似コードを検索し、それに従ってコーディングしました。h(n)にはマンハッタン距離を使用しました。(f(n)= g(n)+ h(n))そしてこれが結果です

これは、邪魔になる壁がない場合に必ず発生しますが、壁をたくさん置くと、最短経路をたどっているように見えます。これが最短経路ですか?どうしてこんな感じじゃないの?

こちらもA*マンハッタンで、同じサイズ(19x19)です。これはhttp://qiao.github.com/PathFinding.js/visual/からのものです

4

3 に答える 3

5

両方のパスのマンハッタン距離は同じです。したがって、どのパスを選択するかは実装に依存します。この特定の部分が選択された理由を知るには、この特定のA*実装のコードを調べる必要があります。

ヒント:フォンノイマン近傍のみを使用し(つまり、斜めに歩かない)、「間違った」方向に一歩も踏み出さない(つまり、例では決して上または左に歩かない)ソースからターゲットセルへのすべてのパスには、同じマンハッタン距離。したがって、ニューヨークにいる場合は、マンハッタンの特定の場所に到達するためにどの交差点をとるかは関係ありません:)

于 2012-06-15T07:57:29.140 に答える
0

マンハッタン距離では、最初の経路が最短経路です。それは単に取られた水平および垂直のステップの数を数えます。ユークリッド距離の最短経路のように見えるものが必要な場合は、アルゴリズムを変更して、あるポイントで水平または垂直に移動する選択肢がある場合に、水平距離が垂直よりも大きい場合に水平を選択するようにすることができます。 1つおよびその逆。

于 2012-06-15T08:05:03.303 に答える
0

開始点から(マンハッタン/ A *結果の)すべての点まで視線(ピタゴラス/ユークリッド)をキャストして終了する必要があります。特定のポイントにラインをキャストすることが障害物によってブロック/隠されている場合は、前にキャストしたポイントを使用して、そのブロックされたポイントから別のラインのキャストを開始し、終了するまで前方に移動します。ブロックされたポイントは、ポイントがセグメント/ラインの最初のポイントの視線によって隠されている場合です。だからそれは次のようなものです:

最初の行:開始---------> S + N(ブロックされたポイントの前)

2番目/中線/秒:ブロックされたポイント----------> S + N(別のブロックされたポイントの前)が、ゴールへの視線を確立するまで、もう一度(新しいライン/セグメント)繰り返します。

最終行:ブロックされたポイント------------->目標

すべての回線を接続すると、はるかに短い最短経路が得られます。もう一度実行することもできますが、逆に別の精度を追加して、視線が開始までゴールから開始するようにします。

于 2015-03-17T16:03:26.687 に答える