JavaScript

BFS(Breadth-First Search) 알고리즘 구현하기 (자바스크립트)

citron031 2023. 9. 30. 00:18

BFS는 최단 경로를 탐색하기 위해서 많이 사용되는 알고리즘으로, DFS와는 다르게 인접한 노드를 순서대로 방문하지만 각 인접 노드의 자식을 방문하는 건 나중에 이루어진다.

 

자바스크립트로 이를 구현해보면 다음과 같다.

// 그래프의 인접 리스트 표현
const graph = {
  A: ['B', 'C'],
  B: ['A', 'D', 'E'],
  C: ['A', 'F'],
  D: ['B'],
  E: ['B', 'F'],
  F: ['C', 'E']
};

function bfs(graph, startNode) {
  const visited = new Set(); // 방문한 노드를 저장하는 Set
  const queue = [startNode]; // 탐색할 노드를 저장하는 큐

  visited.add(startNode); // 시작 노드 방문 처리

  while (queue.length > 0) {
    const currentNode = queue.shift(); // 큐에서 노드를 하나 꺼냄
    console.log(currentNode); // 현재 노드 출력

    // 현재 노드의 인접 노드를 순회하면서 방문하지 않은 노드를 큐에 추가하고 방문 처리
    for (const neighbor of graph[currentNode]) {
      if (!visited.has(neighbor)) {
        visited.add(neighbor);
        queue.push(neighbor);
      }
    }
  }
}

bfs(graph, 'A'); // 시작 노드 'A'에서 BFS 탐색 시작

그래프로 표현되는 데이터에서는 위와 같이 queue을 사용하여 bfs를 구현할 수 있다.

먼저 인접한 노드들이 큐에 들어가기 때문에, 인접한 노드를 먼저 순회할 수 있는 알고리즘이다.