Breadth-First Search

Explores a graph level by level from a source vertex using a FIFO queue, visiting every vertex reachable from the source in non-decreasing order of edge distance.

Time O(V + E) Space O(V) Unweighted Traversal

How it works

Explores a graph level by level from a source vertex using a FIFO queue, visiting every vertex reachable from the source in non-decreasing order of edge distance.

Implementation

function breadthFirstSearch(graph, start) {
  const order = [];
  const visited = [];
  for (let i = 0; i < graph.length; i++) {
    visited[i] = false;
  }
  const queue = [];
  let head = 0;
  let tail = 0;
  queue[tail] = start;
  tail = tail + 1;
  visited[start] = true;
  while (head < tail) {
    const node = queue[head];
    head = head + 1;
    order[order.length] = node;
    const neighbors = graph[node];
    for (let i = 0; i < neighbors.length; i++) {
      const next = neighbors[i];
      if (!visited[next]) {
        visited[next] = true;
        queue[tail] = next;
        tail = tail + 1;
      }
    }
  }
  return order;
}