個人的な理解
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は思考の深い理解を必要とせず、その後、アクティブ実際それに従事します。