In TypeScript, a queue for BFS can be implemented using an array: const queue: number[] = []; initializes an empty number array.
Step 2: Check other options for correctness
Options A and B use undefined classes ArrayQueue and Queue which are not built-in. var queue = []; queue.push(1); uses var which is discouraged and lacks type annotation.
Hint: Use typed arrays for queues in TypeScript [OK]
Common Mistakes:
Using undefined queue classes
Using var instead of let/const
Not typing the queue array
3. Given the following graph adjacency list and BFS-based connected components code, what is the output?
const graph = {
0: [1],
1: [0, 2],
2: [1],
3: [4],
4: [3]
};
function bfsComponents(graph: {[key: number]: number[]}): number[][] {
const visited = new Set<number>();
const components: number[][] = [];
for (const node in graph) {
const n = Number(node);
if (!visited.has(n)) {
const queue: number[] = [n];
const component: number[] = [];
visited.add(n);
while (queue.length > 0) {
const current = queue.shift()!;
component.push(current);
for (const neighbor of graph[current]) {
if (!visited.has(neighbor)) {
visited.add(neighbor);
queue.push(neighbor);
}
}
}
components.push(component);
}
}
return components;
}
console.log(bfsComponents(graph));
medium
A. [[0], [1], [2], [3], [4]]
B. [[0, 1], [2, 3, 4]]
C. [[0, 1, 2, 3, 4]]
D. [[0, 1, 2], [3, 4]]
Solution
Step 1: Analyze graph structure
The graph has two connected components: nodes 0,1,2 connected together and nodes 3,4 connected together.
Step 2: Trace BFS traversal
Starting from node 0, BFS visits 0, then 1, then 2. Then from node 3, BFS visits 3 and 4. So components are [[0,1,2],[3,4]].
Final Answer:
[[0, 1, 2], [3, 4]] -> Option D
Quick Check:
Two connected groups = [[0,1,2],[3,4]] [OK]
Hint: BFS visits all nodes in one component before next [OK]
Common Mistakes:
Assuming all nodes are one component
Splitting connected nodes incorrectly
Confusing node order in output
4. The following BFS code for connected components has a bug. What is the error?
function bfsComponents(graph: {[key: number]: number[]}): number[][] {
const visited = new Set<number>();
const components: number[][] = [];
for (const node in graph) {
const n = Number(node);
if (!visited.has(n)) {
const queue: number[] = [n];
const component: number[] = [];
while (queue.length > 0) {
const current = queue.shift()!;
component.push(current);
for (const neighbor of graph[current]) {
if (!visited.has(neighbor)) {
queue.push(neighbor);
visited.add(neighbor);
}
}
}
components.push(component);
}
}
return components;
}
medium
A. Queue is not initialized properly
B. Visited nodes are never added, causing infinite loops
C. Visited nodes are added after pushing to queue, causing duplicates
D. Component array is not pushed to components
Solution
Step 1: Check visited node addition timing
Visited nodes should be marked as visited before pushing to queue to avoid duplicates.
Step 2: Identify the bug in code
In the code, queue.push(neighbor) happens before visited.add(neighbor), which can cause the same neighbor to be pushed multiple times if visited check is delayed.
Final Answer:
Visited nodes are added after pushing to queue, causing duplicates -> Option C
Quick Check:
Mark visited before queue push to avoid duplicates [OK]
Hint: Add to visited before queue push to prevent repeats [OK]
Common Mistakes:
Adding visited after queue push
Not adding visited at all
Forgetting to push neighbors
5. You have a graph with nodes 0 to 5 and edges: 0-1, 1-2, 3-4. Using BFS to find connected components, what will be the output if the graph is represented as: