What is the shortest distance array output after running Dijkstra's algorithm from node 0?
const graph = [
[{node:1, weight:4}, {node:2, weight:1}],
[{node:3, weight:1}],
[{node:1, weight:2}, {node:3, weight:5}],
[]
];
function dijkstra(graph: {node:number, weight:number}[][], start: number): number[] {
const dist = Array(graph.length).fill(Infinity);
dist[start] = 0;
const visited = new Set<number>();
while (visited.size < graph.length) {
let u = -1;
let minDist = Infinity;
for (let i = 0; i < dist.length; i++) {
if (!visited.has(i) && dist[i] < minDist) {
minDist = dist[i];
u = i;
}
}
if (u === -1) break;
visited.add(u);
for (const edge of graph[u]) {
if (dist[u] + edge.weight < dist[edge.node]) {
dist[edge.node] = dist[u] + edge.weight;
}
}
}
return dist;
}
console.log(dijkstra(graph, 0));Trace the shortest path updates step by step from node 0.
Starting from node 0, distances update as follows: node 2 gets distance 1, node 1 gets updated to 3 via node 2, and node 3 gets distance 4 via node 1.
Which statement correctly describes Dijkstra's algorithm behavior on graphs with negative edge weights?
Think about how negative weights affect path cost updates.
Dijkstra's algorithm assumes all edge weights are non-negative. Negative edges can cause it to miss shorter paths.
What error will this Dijkstra's algorithm code produce when run?
function dijkstraBug(graph: {node:number, weight:number}[][], start: number): number[] {
const dist = Array(graph.length).fill(Infinity);
dist[start] = 0;
const visited = new Set<number>();
while (visited.size <= graph.length) {
let u = -1;
let minDist = Infinity;
for (let i = 0; i < dist.length; i++) {
if (!visited.has(i) && dist[i] < minDist) {
minDist = dist[i];
u = i;
}
}
if (u === -1) break;
visited.add(u);
for (const edge of graph[u]) {
if (dist[u] + edge.weight < dist[edge.node]) {
dist[edge.node] = dist[u] + edge.weight;
}
}
}
return dist;
}
const graph = [
[{node:1, weight:7}],
[{node:2, weight:5}],
[]
];
console.log(dijkstraBug(graph, 0));Check the loop condition carefully.
The while loop condition uses <= graph.length, causing the loop to run one extra time and never break properly, leading to an infinite loop.
Which data structure choice will optimize Dijkstra's algorithm for a graph with many nodes and edges?
Think about how to quickly find the next closest node.
An adjacency list saves space for sparse graphs, and a min-heap efficiently selects the next node with the smallest tentative distance.
What is the shortest distance array output after running Dijkstra's algorithm from node 0 on this graph?
const graph = [
[{node:1, weight:10}, {node:2, weight:3}],
[{node:2, weight:1}, {node:3, weight:2}],
[{node:1, weight:4}, {node:3, weight:8}, {node:4, weight:2}],
[{node:4, weight:7}],
[{node:3, weight:9}]
];
function dijkstra(graph: {node:number, weight:number}[][], start: number): number[] {
const dist = Array(graph.length).fill(Infinity);
dist[start] = 0;
const visited = new Set<number>();
while (visited.size < graph.length) {
let u = -1;
let minDist = Infinity;
for (let i = 0; i < dist.length; i++) {
if (!visited.has(i) && dist[i] < minDist) {
minDist = dist[i];
u = i;
}
}
if (u === -1) break;
visited.add(u);
for (const edge of graph[u]) {
if (dist[u] + edge.weight < dist[edge.node]) {
dist[edge.node] = dist[u] + edge.weight;
}
}
}
return dist;
}
console.log(dijkstra(graph, 0));Consider all possible paths and update distances carefully.
Shortest distances are: node 0=0, node 2=3, node 1=7 (via node 2), node 3=5 (via node 1), node 4=5 (via node 2).