What if you could find the quickest way through a maze without trying every path?
Why Shortest Path in Unweighted Graph Using BFS in DSA Javascript?
Imagine you are in a big city with many streets and intersections. You want to find the quickest 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 writing down every street manually, it will take a lot of time and you might get lost.
Trying to find the shortest path by checking every possible route manually is slow and confusing. You can easily miss shorter routes or waste time going in circles.
Writing down all paths and comparing them by hand is error-prone and not practical for big maps.
Using Breadth-First Search (BFS) on an unweighted graph helps you explore all nearby intersections first before moving further. This way, you find the shortest path quickly and without missing any better routes.
BFS works like spreading out in waves, checking all neighbors step by step until you reach your friend's house.
function findPath(graph, start, end) {
// Try all paths manually, very complex
// No clear way to find shortest path
}function shortestPathBFS(graph, start, end) {
let queue = [start];
let visited = new Set([start]);
let distance = { [start]: 0 };
while (queue.length) {
let node = queue.shift();
if (node === end) return distance[node];
for (let neighbor of graph[node]) {
if (!visited.has(neighbor)) {
visited.add(neighbor);
distance[neighbor] = distance[node] + 1;
queue.push(neighbor);
}
}
}
return -1;
}You can quickly find the shortest route in any unweighted network, like maps, social connections, or puzzles, saving time and effort.
Finding the shortest number of flights between two cities when all flights take the same time, or the fewest friend connections between two people on a social network.
Manual path checking is slow and error-prone.
BFS explores neighbors level by level to find shortest paths.
This method works perfectly for unweighted graphs where all edges cost the same.
Practice
Solution
Step 1: Understand BFS traversal
BFS explores nodes level by level starting from the source node, visiting all neighbors before moving deeper.Step 2: BFS finds shortest paths in unweighted graphs
Because BFS visits nodes in order of increasing distance, the first time it reaches a node is via the shortest path.Final Answer:
The shortest path from a start node to all other nodes -> Option DQuick Check:
BFS = shortest path in unweighted graph [OK]
- Confusing BFS with DFS for shortest path
- Thinking BFS finds longest path
- Assuming BFS counts total nodes only
Solution
Step 1: Identify BFS queue operations
BFS requires adding nodes at the end and removing from the front, which is a queue behavior.Step 2: Use Array methods for queue
JavaScript arrays support push (add end) and shift (remove front), perfect for BFS queue.Final Answer:
Array with push and shift methods -> Option BQuick Check:
Queue = Array push/shift [OK]
- Using Set as queue (no order guaranteed)
- Using Map for queue operations
- Using Object which has no order
const graph = {
0: [1, 2],
1: [0, 3],
2: [0, 3],
3: [1, 2, 4],
4: [3]
};
// BFS from node 0Solution
Step 1: Initialize distances and start BFS
Distance to start node 0 is 0. Neighbors 1 and 2 get distance 1.Step 2: Visit neighbors of 1 and 2
Node 3 is neighbor of 1 and 2, so distance is 2. Node 4 is neighbor of 3, distance 3.Final Answer:
[0, 1, 1, 2, 3] -> Option CQuick Check:
Distances = [0,1,1,2,3] [OK]
- Assigning wrong distances to neighbors
- Mixing up node indices
- Forgetting to update distance only once
function bfs(graph, start) {
const queue = [];
const distances = {};
queue.push(start);
distances[start] = 0;
while (queue.length > 0) {
const node = queue.pop();
for (const neighbor of graph[node]) {
if (!(neighbor in distances)) {
distances[neighbor] = distances[node] + 1;
queue.push(neighbor);
}
}
}
return distances;
}Solution
Step 1: Check queue operations in BFS
BFS requires FIFO order, so nodes must be removed from front using shift(), not pop() which removes from end.Step 2: Effect of using pop()
Using pop() makes it LIFO, turning BFS into DFS order, breaking shortest path logic.Final Answer:
Using pop() instead of shift() causes wrong BFS order -> Option AQuick Check:
Queue removal must be shift() for BFS [OK]
- Using pop() instead of shift() for queue
- Initializing distances incorrectly
- Using Set for queue which loses order
Solution
Step 1: Explore neighbors from node 0
Neighbors are 1 and 2, both distance 1.Step 2: From neighbors, explore node 3
Node 3 is neighbor of both 1 and 2, distance 2.Step 3: From node 3, go to 4 then 5
Node 4 distance 3, node 5 distance 4. The path via 1 is [0,1,3,4,5].Final Answer:
[0, 1, 3, 4, 5] -> Option AQuick Check:
Shortest path = [0,1,3,4,5] [OK]
- Choosing longer paths ignoring BFS order
- Skipping nodes in path
- Confusing edges and neighbors
Ready to prove it?
Pass the test and this pattern moves unknown
