私はCでA *アルゴリズムを実装しています。手順は次のとおりです。A *アルゴリズムの実装
すべての開いているノードに優先度キュー[using array]を使用しています。私は距離が重複しているので、同じ距離/優先度を持つ複数のノードであるため、PQにノードを挿入する際に、挿入されたノードの親が同じ優先順位を持っていれば、入力されたメンバーは、特定の方向に従うように、トップに(または可能な限り)残っています。また、削除するときに、最後の要素と最後の要素を入れ替えたときに、最後の要素を入れ替えた要素が子要素の1つと同じ場合は、最後にスワップされます(これが影響を受けるかどうかはわかりませんいずれにしても)。
問題は、私は100 * 100の行列を持っており、私は移動している2D配列の(0,20)から(15,20)までの障害があると言います。今度は開始位置(2,2)と終了位置(16,20)に対して直線的なパスを取得します。つまり、まず最初に右に進み、次に15まで移動して1つ右に移動します。
しかし、私が(2,2)として始まり、最後に(12,78)として、つまり障害物によってポイントが区切られていて、パスが周りを回らなければならない場合、私はまだ(16,20) (16,20)の後の私の道はまだまっすぐですが、私の道まで(16,20)はジグザグです。つまり、私はある距離をまっすぐに、次にいくつかの右に、そして次に右に、そしてそちらに行って、最終的に、20)それからまっすぐ進む。
なぜこのジグザグのパスが距離の前半にあるのですか?私の目的地が(16,20)ではなく(12,78) 。
ありがとうございました。
void findPath(array[ROW][COLUMN],sourceX,sourceY,destX,destY) {
PQ pq[SIZE];
int x,y;
insert(pq,sourceX,sourceY);
while(!empty(pq)) {
remove(pq);
if(removedIsDestination)
break; //Path Found
insertAdjacent(pq,x,y,destX,destY);
}
}
void insert(PQ pq[SIZE],element){
++sizeOfPQ;
PQ[sizeOfPQ]==element
int i=sizeOfPQ;
while(i>0){
if(pq[i].priority <= pq[(i-1)/2].priority){
swapWithParent
i=(i-1)/2;
}
else
break;
}
}
コードの関連する部分を表示してください。コードには1000語以上の単語があります。 – Femaref
@Femarefそれが役に立ったら教えてください。 –
これはあなたのスコアリングと関係していると思われます。 – Hogan