Why Shortest Path Is a Graph Problem Not a Tree Problem
📖 Scenario: Imagine you are planning a trip in a city. The city map has many roads connecting different places. You want to find the shortest way to get from your home to a park.This is like finding the shortest path in a network of roads. Roads can connect places in many ways, sometimes with loops or multiple routes.
🎯 Goal: You will create a simple map using a graph data structure, then find the shortest path from one place to another. This will show why shortest path problems need graphs, not just trees.
📋 What You'll Learn
Create a graph using an adjacency list to represent places and roads
Add a starting point variable for the path search
Implement a simple shortest path search using breadth-first search (BFS)
Print the shortest path found from start to destination
💡 Why This Matters
🌍 Real World
Finding shortest routes in maps, network routing, social network connections, and many other real-world problems use graphs.
💼 Career
Understanding graphs and shortest path algorithms is essential for software engineers working in navigation, logistics, networking, and data analysis.
Progress0 / 4 steps
1
Create the graph as an adjacency list
Create a constant called graph as an object with these exact keys and values: 'Home': ['Cafe', 'Library'], 'Cafe': ['Home', 'Park'], 'Library': ['Home', 'Park'], 'Park': ['Cafe', 'Library']
DSA Typescript
Hint
Use an object where each key is a place and the value is an array of connected places.
2
Add the starting point variable
Create a constant called start and set it to the string 'Home'
DSA Typescript
Hint
Just create a constant with the exact name and value.
3
Implement BFS to find the shortest path
Create a function called findShortestPath that takes graph, start, and end as parameters and returns an array of strings representing the shortest path. Use a queue and a visited set to perform breadth-first search. Return the path from start to end.
DSA Typescript
Hint
Use a queue to keep paths to explore and a set to track visited places. Add neighbors to the queue with the current path extended.
4
Print the shortest path from Home to Park
Call findShortestPath with graph, start, and 'Park' as arguments. Store the result in a constant called shortestPath. Then print shortestPath.join(' -> ') to show the path as a string.
DSA Typescript
Hint
Call the function with the right arguments, save the result, and print it joined by arrows.
Practice
(1/5)
1. Why is finding the shortest path usually considered a graph problem rather than a tree problem?
easy
A. Because shortest path algorithms only work on trees.
B. Because trees do not have nodes or edges.
C. Because trees always have negative edge weights.
D. Because graphs can have cycles and multiple paths between nodes, unlike trees.
Solution
Step 1: Understand the structure of trees and graphs
Trees are a special type of graph with no cycles and exactly one path between any two nodes.
Step 2: Analyze shortest path requirements
Shortest path problems require handling multiple paths and cycles, which only general graphs can have.
Final Answer:
Because graphs can have cycles and multiple paths between nodes, unlike trees. -> Option D
Quick Check:
Graphs allow multiple paths [OK]
Hint: Shortest path needs multiple paths; trees have only one [OK]
Common Mistakes:
Thinking trees have cycles
Assuming shortest path only applies to trees
Confusing nodes and edges in trees
2. Which of the following TypeScript code snippets correctly declares a graph adjacency list for shortest path calculation?
easy
A. const graph: Map = new Map();
B. const graph: number[][] = []; graph[0] = 1;
C. const graph: string = 'adjacency list';
D. const graph: number = 0;
Solution
Step 1: Identify correct graph adjacency list type
An adjacency list for a graph is best represented as a Map from node to array of connected nodes.
Step 2: Check code correctness
const graph: Map = new Map(); uses Map which is correct. const graph: number[][] = []; graph[0] = 1; assigns a number to an array index incorrectly. Options C and D use wrong types.
Final Answer:
const graph: Map<number, number[]> = new Map(); -> Option A
Quick Check:
Map with arrays [OK]
Hint: Use Map for adjacency lists [OK]
Common Mistakes:
Using wrong data types for graph
Assigning values directly to array index without initialization
Confusing string or number types for graph
3. Given the following graph represented as adjacency list, what is the shortest path distance from node 0 to node 3?
const graph = new Map([
[0, [1, 2]],
[1, [2, 3]],
[2, [3]],
[3, []]
]);
// Assume each edge has weight 1
// Use BFS to find shortest path distance
medium
A. 1
B. 2
C. 3
D. 4
Solution
Step 1: Trace BFS from node 0 to node 3
From 0, neighbors are 1 and 2 (distance 1). From 1, neighbors include 3 (distance 2). From 2, neighbor is 3 (distance 2).
Step 2: Determine shortest distance
Shortest path is 0 -> 1 -> 3 or 0 -> 2 -> 3, both length 2.
Final Answer:
2 -> Option B
Quick Check:
Shortest path length = 2 [OK]
Hint: BFS finds shortest path in unweighted graph [OK]
Common Mistakes:
Counting edges incorrectly
Confusing path length with number of nodes
Ignoring multiple paths
4. Identify the bug in this TypeScript code snippet for shortest path in a graph and select the fix:
function shortestPath(graph: Map, start: number, end: number): number {
const queue: number[] = [start];
const distances: Map = new Map();
distances.set(start, 0);
while (queue.length > 0) {
const node = queue.shift();
for (const neighbor of graph.get(node)!) {
if (!distances.has(neighbor)) {
distances.set(neighbor, distances.get(node)! + 1);
queue.push(neighbor);
}
}
}
return distances.get(end)!;
}
medium
A. Change queue.shift() to queue.pop() to get correct order.
B. Remove the exclamation marks (!) to avoid errors.
C. Add check if node is undefined after shift before using it.
D. Initialize distances with Infinity for all nodes before starting.
Solution
Step 1: Analyze queue.shift() usage
queue.shift() can return undefined if queue is empty, but loop condition prevents that. However, TypeScript needs explicit check for undefined.
Step 2: Fix by checking node is not undefined
Adding a check after shift ensures safe usage of node in graph.get(node).
Final Answer:
Add check if node is undefined after shift before using it. -> Option C
Quick Check:
Check for undefined after shift [OK]
Hint: Always check shift() result before use in TypeScript [OK]
Common Mistakes:
Using pop() breaks BFS order
Ignoring possible undefined from shift()
Misunderstanding exclamation mark usage
5. You want to find the shortest path in a network where some edges have negative weights but no negative cycles. Why is this a graph problem and which algorithm suits best?
hard
A. Because graphs can have cycles and negative edges; use Bellman-Ford algorithm.
B. Because trees cannot have negative weights; use Dijkstra's algorithm.
C. Because trees always have positive weights; use BFS.
D. Because graphs with negative edges are invalid; no algorithm applies.
Solution
Step 1: Understand edge weights and graph structure
Negative edge weights and cycles can only appear in graphs, not trees.
Step 2: Choose suitable algorithm
Dijkstra's algorithm fails with negative edges; Bellman-Ford handles negative weights and detects negative cycles.
Final Answer:
Because graphs can have cycles and negative edges; use Bellman-Ford algorithm. -> Option A
Quick Check:
Negative edges + cycles = Bellman-Ford [OK]
Hint: Negative edges? Use Bellman-Ford on graphs [OK]
Common Mistakes:
Using Dijkstra with negative edges
Thinking trees can have negative edges
Assuming no algorithm works with negative edges
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.