Coding questions · Amazon
Implement BFS to Find Shortest Path in Graph
This question evaluates understanding of graph traversal algorithms, particularly breadth-first search, and competency in computing shortest paths and reconstructing an example shortest route in large undirected graphs.
Scenario
Social network needs to compute the shortest friend-distance between two users in an undirected graph containing millions of nodes.
Question
Implement an iterative BFS that returns the minimum number of hops between a source and target user. Extend the function to also return one of the actual shortest paths.
Hints
Use a queue, visited set, and early exit when target is found.
BFS Shortest Hops and Path in Graph
Given an undirected, unweighted graph with n nodes labeled 0..n-1 and a list of edges edges where each edge is [u, v], implement an iterative BFS that returns the minimum number of hops (edges) between source and target and one corresponding shortest path. Return a dictionary: {"distance": d, "path": p}. If target is unreachable, return {"distance": -1, "path": []}. The path must start at source and end at target. If source == target, return {"distance": 0, "path": [source]}.
Constraints
- 1 <= n <= 200000
- 0 <= len(edges) <= 400000
- 0 <= u, v < n for every edge [u, v]
- 0 <= source, target < n
- Graph is undirected and may be disconnected
- Implement iterative BFS using a queue (no recursion)
- Return one shortest path; if none exists, return distance -1 and empty path
Examples
Example 1
Input: n = 6, edges = [[0,1],[1,2],[2,3],[0,4],[4,5]], source = 0, target = 3
Output: {"distance": 3, "path": [0,1,2,3]}
Explanation: The unique shortest path from 0 to 3 is 0->1->2->3 with 3 hops.
Example 2
Input: n = 4, edges = [[0,1],[2,3]], source = 0, target = 3
Output: {"distance": -1, "path": []}
Explanation: Nodes 0 and 3 are in different components; no path exists.
Hints
- Use a queue and a visited structure to explore nodes level by level.
- Track each node's predecessor to reconstruct the path once the target is found.
- You can stop the BFS as soon as the target is discovered; distance is path length minus one.
Approach
Breadth-first search (BFS) explores the graph layer by layer, guaranteeing that the first time we discover the target we have found a shortest path in an unweighted graph. We maintain a predecessor array to reconstruct the path by backtracking from the target to the source. We also keep a visited array to avoid revisiting nodes. We exit early as soon as the target is discovered to minimize work.
- Time complexity: O(n + m), where n is the number of nodes and m is the number of edges
- Space complexity: O(n + m) for adjacency list, visited, and parent arrays