Bird
Raised Fist0
DSA Javaprogramming~3 mins

Why Shortest Path in Unweighted Graph Using BFS in DSA Java?

Choose your learning style10 modes available
The Big Idea

What if you could find the shortest route without guessing or getting lost?

The Scenario

Imagine you are in a city with many streets and intersections. You want to find the shortest way to walk from your home to a friend's house without knowing the map well.

If you try to guess the path by walking randomly or writing down all possible routes on paper, it will take a lot of time and you might get lost.

The Problem

Manually checking every possible path is slow and confusing. You might miss shorter routes or waste time going in circles.

Writing down all paths on paper or in your head is error-prone and hard to keep track of.

The Solution

Using Breadth-First Search (BFS) on a graph of intersections and streets helps you find the shortest path quickly and without mistakes.

BFS explores all nearby intersections first before going further, ensuring the first time you reach your friend's house is the shortest path.

Before vs After
✗ Before
void findShortestPath(int start, int end) {
  // Try all paths manually
  // Keep track of visited intersections on paper
  // Compare lengths after exploring many routes
}
✓ After
void findShortestPath(List<Integer>[] graph, int start, int end) {
  Queue<Integer> queue = new LinkedList<>();
  int n = graph.length;
  boolean[] visited = new boolean[n];
  int[] distance = new int[n];
  queue.add(start);
  visited[start] = true;
  distance[start] = 0;
  while (!queue.isEmpty()) {
    int current = queue.poll();
    for (int neighbor : graph[current]) {
      if (!visited[neighbor]) {
        visited[neighbor] = true;
        distance[neighbor] = distance[current] + 1;
        queue.add(neighbor);
      }
    }
  }
  System.out.println(visited[end] ? "Shortest distance: " + distance[end] : "No path found.");
}
What It Enables

You can quickly find the shortest route in any network of connected points without guessing or missing better options.

Real Life Example

GPS apps use similar methods to find the shortest driving or walking route on city maps, helping you reach your destination faster.

Key Takeaways

Manual path checking is slow and error-prone.

BFS explores neighbors level by level to find shortest paths.

This method guarantees the shortest path in unweighted graphs.

Practice

(1/5)
1. What does BFS (Breadth-First Search) help find in an unweighted graph?
easy
A. The shortest path from a start node to all other nodes
B. The node with the highest degree
C. The longest path between two nodes
D. The total number of edges in the graph

Solution

  1. Step 1: Understand BFS traversal

    BFS explores nodes level by level starting from the source node, visiting all neighbors before moving deeper.
  2. Step 2: BFS finds shortest paths in unweighted graphs

    Because BFS visits nodes in order of increasing distance, the first time it reaches a node is via the shortest path.
  3. Final Answer:

    The shortest path from a start node to all other nodes -> Option A
  4. Quick Check:

    BFS = shortest path in unweighted graph [OK]
Hint: BFS visits nodes by distance layers to find shortest paths [OK]
Common Mistakes:
  • Confusing BFS with DFS for shortest path
  • Thinking BFS finds longest path
  • Assuming BFS works only for weighted graphs
2. Which Java data structure is commonly used to implement BFS for shortest path in an unweighted graph?
easy
A. Queue
B. PriorityQueue
C. HashMap
D. Stack

Solution

  1. Step 1: Recall BFS traversal order

    BFS explores nodes in a first-in, first-out order to visit neighbors level by level.
  2. Step 2: Identify the correct data structure

    A Queue supports FIFO order, making it ideal for BFS traversal.
  3. Final Answer:

    Queue -> Option A
  4. Quick Check:

    BFS uses Queue for level order traversal [OK]
Hint: Use Queue for FIFO order in BFS traversal [OK]
Common Mistakes:
  • Using Stack which is LIFO and suits DFS
  • Confusing PriorityQueue with Queue
  • Using HashMap which stores key-value pairs, not order
3. What is the output distance array after running BFS from node 0 on this graph?
Graph edges:
0 - 1
0 - 2
1 - 3
2 - 3
3 - 4
Assume nodes are 0 to 4 and distance to start node is 0.
medium
A. [0, 0, 0, 0, 0]
B. [0, 1, 2, 3, 4]
C. [0, 1, 1, 1, 2]
D. [0, 1, 1, 2, 3]

Solution

  1. Step 1: Start BFS from node 0 and set distance 0

    Distance[0] = 0. Neighbors 1 and 2 get distance 1.
  2. Step 2: Visit neighbors of 1 and 2

    Node 3 is neighbor of both 1 and 2, first reached at distance 2.
  3. Step 3: Visit neighbor of 3

    Node 4 is neighbor of 3, distance is 3.
  4. Final Answer:

    [0, 1, 1, 2, 3] -> Option D
  5. Quick Check:

    Distances increase by 1 per BFS level [OK]
Hint: Distance increments by 1 each BFS layer from start [OK]
Common Mistakes:
  • Assigning wrong distances to node 3
  • Confusing BFS with DFS distances
  • Setting all distances to zero
4. Identify the error in this BFS code snippet for shortest path:
int[] dist = new int[n];
Arrays.fill(dist, Integer.MAX_VALUE);
Queue<Integer> q = new LinkedList<>();
q.add(start);
dist[start] = 0;
while(!q.isEmpty()) {
  int u = q.poll();
  for(int v : graph.get(u)) {
    if(dist[v] == 0) {
      dist[v] = dist[u] + 1;
      q.add(v);
    }
  }
}
medium
A. The queue should be a Stack for BFS
B. Distance array should be initialized with zeros
C. The condition 'dist[v] == 0' should check for Integer.MAX_VALUE instead
D. The start node distance should be Integer.MAX_VALUE

Solution

  1. Step 1: Understand distance initialization

    Distances are set to Integer.MAX_VALUE to mark unvisited nodes.
  2. Step 2: Check visitation condition

    Condition 'dist[v] == 0' wrongly checks for zero, but unvisited nodes have Integer.MAX_VALUE.
  3. Step 3: Correct condition

    Change condition to 'dist[v] == Integer.MAX_VALUE' to detect unvisited nodes properly.
  4. Final Answer:

    The condition 'dist[v] == 0' should check for Integer.MAX_VALUE instead -> Option C
  5. Quick Check:

    Check unvisited nodes by Integer.MAX_VALUE [OK]
Hint: Check unvisited nodes by initial max distance, not zero [OK]
Common Mistakes:
  • Using zero to check unvisited nodes when distances initialized to max
  • Using Stack instead of Queue for BFS
  • Incorrect distance initialization
5. Given an unweighted graph with nodes 0 to 5 and edges:
0-1, 0-2, 1-3, 2-3, 3-4, 4-5
If BFS starts at node 0, what is the shortest path from node 0 to node 5?
hard
A. [0, 1, 2, 3, 4, 5]
B. [0, 1, 3, 4, 5]
C. [0, 2, 3, 5]
D. [0, 2, 4, 5]

Solution

  1. Step 1: Run BFS to find shortest distances

    Distances: 0->0, 1->1, 2->1, 3->2, 4->3, 5->4.
  2. Step 2: Trace shortest path from 5 back to 0

    From 5 to 4, 4 to 3, 3 to 1 or 2, choose 1 for shortest path: 0->1->3->4->5.
  3. Final Answer:

    [0, 1, 3, 4, 5] -> Option B
  4. Quick Check:

    Shortest path follows BFS layers [OK]
Hint: Trace path backward from target using distances [OK]
Common Mistakes:
  • Choosing longer paths ignoring BFS distances
  • Skipping nodes in path
  • Confusing BFS with DFS path
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard