BFS (Breadth First Search)

너비 우선 탐색 (BFS)

BFS Algorithm (1)..gif|400
BFS는 그래프 (Graph) 전체를 탐색하는 방법 중 하나로, 시작 정점에서 부터 정점에 인접한 모든 정점들을 우선 방문하는 방법이다.
더 이상 방문하지 않은 정점이 없을 때까지 방문하지 않은 모든 정점들에 대해 BFS를 적용한다.

BFS는 큐 (Queue)를 이용하여 구현한다.

장점

단점

구현

// 편의를 위해 graph의 0 번째 index는 비워둠  
const graph = [[], [2, 3, 4], [1, 5], [1, 6, 7], [1, 8], [2, 9], [3, 10], [3], [4], [5], [6]];  
  
// 방문해야 할 노드를 담은 que  
let queue = [];  
  
// 방문한 노드  
const visited = new Set();  
  
const bfs = (graph, node) => {  
  queue = [node];  
  
  // queue가 빌때까지 반복  
  while (queue.length > 0) {  
    // 방문한 목록에 노드 추가  
    visited.add(node);  
  
    // queue 앞에서 제거  
    queue.shift();  
  
    // 현재 노드의 인접 노드들을 검색하며 방문하지 않은 노드라면 queue에 넣는다.  
    const adjacencyNode = graph[node];  
    adjacencyNode.forEach((node) => {  
      if (!visited.has(node)) {  
        queue.push(node);  
      }  
    });  
  
    // queue에 가장 앞에 노드를 다음 탐색할 노드로 지정  
    node = queue[0];  
  }  
};  
  
bfs(graph, 1);  
  
console.log(visited);