Shortest Distance from Source (Dijkstra's Algorithm)
JavaScript
hard
45 mins
Given a weighted directed graph represented as an adjacency list graph and a source node src, return an array dist where dist[i] represents the shortest distance (sum of edge weights) 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.
Note:
- The graph representation uses [neighbor, weight] pairs for each edge, where weight is a non-negative number.
Examples
Input: graph = [[[1, 4], [2, 1]], [[3, 1]], [[1, 2], [3, 5]], []], src = 0 Output: [0, 3, 1, 4] Explanation: - Distance from 0 to 0: 0 (same node) - Distance from 0 to 1: 3 (0 -> 2 -> 1, weight: 1 + 2 = 3, not 0 -> 1 with weight 4) - Distance from 0 to 2: 1 (direct edge with weight 1) - Distance from 0 to 3: 4 (0 -> 2 -> 1 -> 3, weight: 1 + 2 + 1 = 4)
Input: graph = [[[1, 5], [2, 2]], [[3, 1]], [[1, 1], [3, 3]], []], src = 0 Output: [0, 3, 2, 4] Explanation: - 0 -> 2 -> 1: weight 2 + 1 = 3 (shorter than 0 -> 1 with weight 5) - 0 -> 2 -> 3: weight 2 + 3 = 5 - 0 -> 2 -> 1 -> 3: weight 2 + 1 + 1 = 4 (shortest path to 3)
Input: graph = [[[1, 10]], []], src = 1 Output: [Infinity, 0] Explanation: Node 1 cannot reach node 0
Constraints
- Graph is represented as an adjacency list where graph[i] contains an array of [neighbor, weight] pairs
- All edge weights are non-negative (≥ 0)
- 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
- The algorithm requires a MinHeap/Priority Queue to efficiently select the node with minimum distance
Function Signature
function dijkstras(graph, src) { // Your code here }
Test Cases
- Base cases: single node graph [[[]]], 0 -> [0]
- Direct edges: [[[1, 5]], []], 0 -> [0, 5]
- Multiple paths: [[[1, 4], [2, 1]], [[3, 1]], [[1, 2], [3, 5]], []], 0 -> [0, 3, 1, 4]
- Disconnected nodes: [[[1, 2]], [], [[3, 1]], []], 0 -> [0, 2, Infinity, Infinity]
- Graph with cycles: [[[1, 1], [2, 3]], [[2, 1]], [[0, 2]]], 0 -> [0, 1, 2, ...]
- Source with no outgoing edges: [[], [[0, 1]], []], 1 -> [1, 0, Infinity]
- Large graphs with various edge weights
Companies:
amazon
dropbox
flipkart
google
swiggy
zomato
uber
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!
