Shortest Distance from Source (BFS)
JavaScript
medium
30 mins
Given a directed graph represented as an adjacency list graph and a source node src, return an array dist where dist[i] represents the shortest distance (number of edges) from src to node i. If node i is unreachable from src, dist[i] should be Infinity. The distance from src to itself is 0.
Examples
Input: graph = [[1, 2], [3], [4], [5], [3], []], src = 0 Output: [0, 1, 1, 2, 2, 3] Explanation: - Distance from 0 to 0: 0 (same node) - Distance from 0 to 1: 1 (direct edge) - Distance from 0 to 2: 1 (direct edge) - Distance from 0 to 3: 2 (0 -> 1 -> 3 or 0 -> 2 -> 4 -> 3) - Distance from 0 to 4: 2 (0 -> 2 -> 4) - Distance from 0 to 5: 3 (0 -> 1 -> 3 -> 5)
Input: graph = [[1], [2], []], src = 0 Output: [0, 1, 2] Explanation: Linear path 0 -> 1 -> 2
Input: graph = [[1], [2], []], src = 2 Output: [Infinity, Infinity, 0] Explanation: Node 2 cannot reach nodes 0 or 1
Input: graph = [[1], [2], [0]], src = 0 Output: [0, 1, 2] Explanation: Graph with cycle, but shortest distances are still valid
Constraints
- Graph is represented as an adjacency list where graph[i] contains all nodes reachable from node i
- Nodes are numbered from 0 to n-1 where n is the number of nodes
- Graph may contain cycles
- Graph may be disconnected
- Distance from src to itself is always 0
- Unreachable nodes have distance Infinity
- Input validation: handle invalid inputs gracefully (non-array graph, invalid node indices)
Function Signature
function shortestDistance(graph, src) { // Your code here }
Test Cases
- Base cases: single node graph [[], 0] -> [0]
- Direct neighbors: [[1, 2], [], []], 0 -> [0, 1, 1]
- Multi-hop paths: [[1], [2], [3], []], 0 -> [0, 1, 2, 3]
- Disconnected nodes: [[1], [], [3], []], 0 -> [0, 1, Infinity, Infinity]
- Graph with cycle: [[1], [2], [0]], 0 -> [0, 1, 2]
- Source with no outgoing edges: [[], [0], []], 1 -> [1, 0, Infinity]
- Large graphs with multiple paths
Companies:
amazon
flipkart
zomato
phonepe
microsoft
Solve Similar questions 🔥
Want to upskill? Explore our courses!
Namaste DSA
Master DSA from scratch with numerous problems, and expert guidance.
Namaste React
Wanna dive deep into React and become Frontend Expert? Learn with me now!
Namaste Frontend System Design
The most comprehensive and detailed course for frontend system design.
Namaste Node.js
Wanna dive deep into Node.js? Enroll into `Namaste Node.js` now!
