基本的なアルゴリズム--- BFS(BFS / BFS)

個人的な理解

BFSは、それがターゲット・ノードを見つけるまで全体マップをトラバースすることによって、最も簡単なグラフ探索アルゴリズムの一つです。

ビューのアルゴリズムの観点から、すべてのバイトが取得されたノード点がFIFOデータ構造体に格納される拡張ので、重複検索を防ぐために、容器(通常SET)に格納されたノードをトラバースされます

ダイヤグラム

 

 示されているように、私たちはどのように対処する、ノードE、BFSの使用にSからの最短パスを取得したいですか?

主なアイデアは:ノードから開始し格納するS子の全てが待ち行列に隣接するノード、そのノードまでの距離は、これらの初期頂点Sが1で標識しました。

                      FIFOキューは、ターゲット・ノードかどうかを判断する、キューを指定し、そうでない子ノードの近くに、エンキューデキューノードは、キューが空になるまでならば

擬似コード

INT BFS(ノードルートノードターゲット){

  キュー<ノード>キュー。

  セット<ノード>セット; //が訪問したノードを格納します

  queue.add(ルート)。

  (ルート)set.add。

  INTインスタンス= 0; //ターゲット・ノード間距離にルートノードを識別する

       {(キューが空ではない)、一方

    インスタンス++;

    QUEUESIZEのint;

              用(インデックス= 0、インデックス<QUEUESIZE;インデックス++){

      ノード= queue.remove(); //ルートキューを取得

         {(ノードがターゲット・ノードである)場合

        インスタンスを返します。

      }

      キュー内の次のノードのノード追加; //近い子ノードのすべてのノードのキューに

    }

  }

  -1を返します。

}

演習に対応した滞在ボタン

https://leetcode-cn.com/problems/open-the-lock/

https://leetcode-cn.com/problems/perfect-squares/

ビューの個人的なポイント---ないスプレーしないように、私を修正して、共通の学習と共通進捗してください

困難なアルゴリズムの質問には、特定のトピックを分解し、BFSに適用する方法である。近道は、BFSは思考の深い理解を必要とせず、その後、アクティブ実際それに従事します。

おすすめ

転載: www.cnblogs.com/sniffs/p/12042046.html
おすすめ