そして、A *アルゴリズムの擬似コード

Q:

1.ハンド最短コースを見つけるために*アルゴリズムを書きます

2.書き込み擬似コード

 

1. A * アルゴリズムのプロセス:

1.まず、経路探索の過程で「オープン・リスト」と呼ばれるリストに追加ポイントの開始位置は、現在では、我々はオープンリストこのリストには、目標点へのゲートウェイである、多くのポイントをテストするために保存されると言うことができます重要な点は、将来は徐々に効率の関心は、このリストは通常​​、すでにリストを並べ替えている間に、より多くのテストポイントを追加して記入します。

2.開い一覧リストが空でない場合は、次のことを繰り返します。

(1)現在のアクセスポイントとしてリストを開くには、目標価格で最小のポイントを見つけます。

(2)リストに現在のポイントが近いリストと呼ばれます。

(3)各工程の周り現在四点以下のように処理され、点がこの点によるものであり、近隣リストのリストがない場合、(これは斜めの動きを制限することである)を指します。

4)点が目標点であることを起こる場合、現在の点の親ノードの点を入れ、そしてループが終了し、経路フラグセットが見出されています。

(5)点は、点として現在の点の親ノード、OPENリスト内の宛先ノードへのノードの計算コストではなく、オープンリストにノードを追加します。

点は、OPENリストに既にある場合は再計算しながら6)、比較の目的地点まで現在の点と点のコストは、小さな点の現在のコストは、親ノードの点として現在の点を置く場合目的地までの価格ポイント、オープンリストの並べ替え。

上記のサイクルが完了した後3、あなたは目標点から始めて、パスを発見した場合、その後、あなたは、このように経路を形成し、出発点を見つけるまで、各ノードの親ノードを検索]をクリックします。 

 

 

2. 擬似コードアルゴリズム

まず、作成したデータ構造のノード:

構造体ノード{

   int型のグラム。    //ノードのG値  

   int型の時間。    //ノードのH値 

   int型 F;    //ノードのF値

   ノード*前。//ノードの前のノード

}。

 

AStar_Search(){

   構造体のノードstart_node。

   start_node.g = 0;

   start_node.h = H(開始);

   start_node.f = start_node.h。

   start_node.pre = NULL;

   OPEN = [start_node]。CLOSE = [];

  

   一方、 {(OPENが空ではありません)

      最小のF値を有するノードは、OPENリンクされたリストから取得されます

      これx_nodeと呼ばれ、対応するノードは、Xと呼ばれています。

      OPENリストからx_nodeを削除します。

      もし {(xはエンドノードです)

          パスを返します。

          各ノードに対応するノード構造のプレポインタに従って。

      }

      以下のための(Xの各後続ノードy){

          構造体のノードy_node。

          y_node.g = x_node.g + W(x、y)は、

          y_node.h = H(Y);

          y_node.f = y_node.g + y_node.h。

          y.pre = x_node。

         

          もし(Yが開いているテーブルではなく、CLOSEテーブルに存在しません){

             OPEN表にy_nodeを置きます。

          } そう  であれば(YはOPENテーブルです){

             OPENテーブルのYノードに対応するノードの構造を取り出し、

             y_openと呼ばれています。

             もし(y_node.f <y_open.f){

                y_open.g = y_node.g。

                y_open.h = y_node.h。

                y_open.f = y_node.f。

                y_open.pre = y_node.pre。

             }

          } {

             CLOSEテーブルのYノードに対応するノードの構造を取り出し、

             y_closeと呼ばれています。

             もし(y_node.f <y_close.f){ 

                CLOSEリストからy_closeを削除します

                OPEN表にy_nodeを置きます。

             }

          }

      }  //終了のため

     

      CLOSEテーブルにx_nodeを置きます。

   }  //エンドながら、

//エンドAStar_Search

 

おすすめ

転載: blog.csdn.net/weixin_43821874/article/details/94737711