0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【TypeScriptで学ぶアルゴリズム】深さ優先探索(DFS)

Posted at

深さ優先探索

木構造のデータを調べていく際に左側(片方)のノードを進めるだけ巡回し、先端まで辿り着いたら親要素へ戻り右側の要素へ進んでいくといった処理を繰り返す探索方法です

深さ優先探索の実装例

1. グラフを表すデータの型定義

dfs.ts
//グラフの隣接リストを表す型
type Graph = { [key: string]: string[] };

2. DFSの実装

dfs.ts
function dfs(graph: Graph, start: string, visited: Set<string> = new Set()): void {
  //開始ノードを巡回済みとしてセットに追加
  visited.add(start);
  console.log(start); //巡回したノードを表示

  //隣接するすべてのノードに対して探索を実行
  for (const neighbor of graph[start]) {
    if (!visited.has(neighbor)) {
      dfs(graph, neighbor, visited); //再帰的にDFSを実行する
    }
  }
}

グラフデータの定義

dfs.ts
const graph: Graph = {
  'A': ['B', 'C'],
  'B': ['D', 'E'],
  'C': ['F'],
  'D': [],
  'E': ['F'],
  'F': []
};

実行!

dfs.ts
//'A'ノードからDFSを開始します
dfs(graph, 'A');

出力結果

A
B
D
E
F
C

上記を見るとしっかり深さ優先探索されていることが分かります!
(ノードAからスタートし、B -> D -> E -> F -> Cという順序で巡回します)

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?