Skip to content
Navigation
← DSA patterns

Breadth-first search

Explore a graph one distance layer at a time. A queue keeps earlier discoveries ahead of later discoveries.

Trace a connected component

Mark a vertex discovered when you enqueue it. Two parents may share a neighbor; this rule prevents duplicate work.

BFS: discover once, process in queue order

Undirected edges: A–B, A–C, B–D, C–D. Visit neighbors alphabetically. Start at A.

ABCD

Step 1 of 5: Enqueue A.

Queue: A

Discovered: A

Read the complete trace
  1. Enqueue A. Queue: A.
  2. Process A. Discover each unseen neighbor once. Queue: B, C.
  3. Process B. Discover each unseen neighbor once. Queue: C, D.
  4. Process C. Discover each unseen neighbor once. Queue: D.
  5. Process D. Discover each unseen neighbor once. Queue: empty.

Invariant and complexity

The queue contains discovered vertices waiting to be processed. With adjacency lists, visiting the reachable component takes O(V + E) time and O(V) auxiliary space. Use a queue with constant-time removal, or an array with a head index.

Try it yourself

Add an isolated vertex E. Starting at A will not reach it. To visit every component, start another traversal from an undiscovered vertex.

Practise a graph problem →