What if you could always find the quickest way without guessing or getting lost?
Why Shortest Path in Unweighted Graph Using BFS in DSA Typescript?
Imagine you are in a city with many streets and intersections. You want to find the shortest way to walk from your home to a friend's house without knowing the map well.
If you try to guess the path by walking randomly or checking every street one by one, it will take a lot of time and effort.
Manually checking every possible path is slow and confusing. You might walk in circles or take longer routes without realizing it.
It is easy to get lost or waste time exploring paths that do not lead to your friend's house quickly.
Using the Breadth-First Search (BFS) method, you explore all nearby intersections first before moving further away.
This way, you find the shortest path step-by-step without missing any closer options.
BFS guarantees the shortest path in an unweighted graph because it checks all neighbors at the current distance before going deeper.
function findPath(graph, start, end) {
// Try all paths manually, very complex and slow
// No clear order of checking neighbors
}function bfsShortestPath(graph, start, end) {
const queue = [start];
const visited = new Set([start]);
const distance = new Map();
distance.set(start, 0);
while (queue.length) {
const node = queue.shift();
if (node === end) return distance.get(node);
for (const neighbor of graph[node]) {
if (!visited.has(neighbor)) {
visited.add(neighbor);
distance.set(neighbor, distance.get(node) + 1);
queue.push(neighbor);
}
}
}
return -1;
}You can quickly find the shortest route in any network of connections without guessing or wasting time.
Finding the quickest way to send a message through a network of friends or computers where each connection has the same cost.
Manual path search is slow and error-prone.
BFS explores neighbors level by level to find the shortest path.
This method works best for unweighted graphs where all edges have equal cost.
Practice
Solution
Step 1: Understand BFS traversal
BFS explores nodes level by level starting from the source node.Step 2: BFS finds shortest paths in unweighted graphs
Because BFS visits nodes in order of increasing distance, it finds shortest paths.Final Answer:
The shortest path from a start node to all other nodes -> Option AQuick Check:
BFS = shortest path in unweighted graph [OK]
- Confusing BFS with DFS for shortest path
- Thinking BFS finds longest path
- Assuming BFS works for weighted graphs without modification
Solution
Step 1: Identify queue operations needed for BFS
BFS requires FIFO order: enqueue at end, dequeue from front.Step 2: Choose Array methods matching FIFO
push() adds to end, shift() removes from front, so Array with push() and shift() works as a queue.Final Answer:
Array with push() and shift() -> Option BQuick Check:
Queue = push + shift [OK]
- Using pop() instead of shift() causes LIFO behavior
- Using Set or Map which don't maintain order
- Using Array methods incorrectly for queue
const graph = [[1,2],[0,3],[0,3],[1,2]]; // Nodes: 0,1,2,3 // Edges: 0-1, 0-2, 1-3, 2-3
Solution
Step 1: Initialize distances and start BFS from node 0
Distance to 0 is 0, others infinity initially.Step 2: Visit neighbors level-wise
Neighbors of 0 are 1 and 2, set distance 1 for both. Then neighbors of 1 and 2 include 3, set distance 2 for 3.Final Answer:
[0, 1, 1, 2] -> Option AQuick Check:
Distances from 0 = [0,1,1,2] [OK]
- Mixing up node indices and distances
- Assigning wrong distances to neighbors
- Confusing BFS with DFS order
function bfs(graph: number[][], start: number) {
const queue = [];
const distances = Array(graph.length).fill(-1);
distances[start] = 0;
queue.push(start);
while (queue.length > 0) {
const node = queue.pop();
for (const neighbor of graph[node]) {
if (distances[neighbor] === -1) {
distances[neighbor] = distances[node] + 1;
queue.push(neighbor);
}
}
}
return distances;
}Solution
Step 1: Check queue operations in BFS
BFS requires FIFO queue, but pop() removes from end (LIFO).Step 2: Identify impact of pop() usage
Using pop() makes traversal DFS-like, breaking shortest path logic.Final Answer:
Using pop() instead of shift() causes wrong BFS order -> Option DQuick Check:
Queue must be FIFO: push + shift [OK]
- Confusing pop() with shift() for queue
- Ignoring visited check for neighbors
- Incorrect initialization of distances
Solution
Step 1: Explore neighbors from node 0
Neighbors are 1 and 2, both distance 1.Step 2: Explore neighbors of 1 and 2
Both connect to 3 at distance 2.Step 3: From 3, move to 4 at distance 3
Shortest path is 0 -> 1 -> 3 -> 4 or 0 -> 2 -> 3 -> 4.Step 4: Choose path found first by BFS
BFS visits 1 before 2, so path is [0,1,3,4].Final Answer:
[0, 1, 3, 4] -> Option CQuick Check:
Shortest path BFS = [0,1,3,4] [OK]
- Assuming direct edge from 0 to 4 exists
- Choosing longer path ignoring BFS order
- Confusing path with distance array
Ready to prove it?
Pass the test and this pattern moves unknown
