Breadth First Search
BFS は Breadth First Search の略で、グラフの最短経路を見つける頂点ベースのテクニックです。 先入れ先出しのQueueデータ構造を用いる。 BFSでは、一度に1つの頂点が選択され、それが訪問されマークされると、その隣接頂点が訪問されキューに格納される。 
Ex-
 A / \ B C / / \ D E F
出力は:
A, B, C, D, E, F
Depth First Search
DFS は Depth First Search の略で、辺ベースの技術です。 スタックデータ構造を使用し、2つの段階を実行します。最初に訪問した頂点はスタックにプッシュされ、次に頂点がない場合は訪問した頂点がポップされます。NO 
BFS | DFS | 
|  |  BFS は Breadth First Search、 
DFS は Depth First Search。 | 
|  |  BFS (Breadth First Search) では Queue データ構造により最短経路を求めることができる。 
DFS(Depth First Search)はStackデータ構造を使う。 | 
| BFSは重みのないグラフでシングルソース最短経路を求めるのに使える。BFSではソース頂点から最小のエッジ数で頂点に到達するからだ。 | DFSでは、送信元から送信先の頂点に到達するために、より多くの辺を通過する可能性がある。 | 
| BFSは与えられた送信元に近い頂点を探すのに適している。 | 
|  | BFSはすべての隣接点を最初に考慮するので、ゲームやパズルで使われる決定木には適さない。 | DFS はゲームやパズルの問題に適している。 決定を行い、その決定を通るすべての経路を探索する。 そして、この決定が勝利の状況をもたらすならば、我々は停止する。 | 
BFSの時間計算量は、隣接リストを使う場合はO(V + E)、隣接行列を使う場合はO(V^2)(Vは頂点、Eは辺を表す)となる。 | DFSの時間計算量も、Adjacency Listを使った場合はO(V + E)、Adjacency Matrixを使った場合はO(V^2)となります(Vは頂点、Eは辺)。 | 二分木トラバーサルでの違いについてBFSとDFSも参照して下さい。  
 実践タグ: