πDay 2. BFS of Graph π§
The problem can be found at the following link: Question Link
π‘ Problem Description:
Given a connected undirected graph represented by a 2D adjacency list adj[][], where adj[i] represents the list of vertices connected to vertex i.
Perform a Breadth First Search (BFS) traversal starting from vertex 0, visiting vertices from left to right as per the given adjacency list.
Return a list containing the BFS traversal of the graph.
Note: Traverse nodes in the same order as given in the adjacency list.
Note: Sorry for uploading late, my exam is going on.
π Example Walkthrough:
Example 1:
Input:
adj = [[1, 2, 3],
[0],
[0, 4],
[0],
[2]]Output:
Explanation:
Starting from vertex 0:
Visit 0 β Output:
[0]Visit 2 (first neighbor of 0) β Output:
[0, 2]Visit 3 (next neighbor of 0) β Output:
[0, 2, 3]Visit 1 (next neighbor of 0) β Output:
[0, 2, 3]Visit 4 (neighbor of 2) β Final Output:
[0, 2, 3, 1, 4]
Example 2:
Input:
Output:
Explanation:
Starting from vertex 0:
Visit 0 β Output:
[0]Visit 1 (first neighbor of 0) β Output:
[0, 1]Visit 2 (next neighbor of 0) β Output:
[0, 1, 2]Visit 3 (first unvisited neighbor of 2) β Output:
[0, 1, 2, 3]Visit 4 (next neighbor of 2) β Final Output:
[0, 1, 2, 3, 4]
Constraints:
$1 \leq$
adj.size()$\leq 10^4$$1 \leq$
adj[i][j]$\leq 10^4$
π― My Approach:
Iterative BFS (Using Queue)
Algorithm Steps:
Maintain a visited array to track visited nodes.
Use a queue to process nodes in a FIFO manner.
Start BFS traversal from node
0and enqueue it.Process nodes from the queue and visit their unvisited neighbors in order.
Store the BFS traversal sequence in a list.
π Time and Auxiliary Space Complexity
Expected Time Complexity: O(V + E), since each vertex and edge is visited once.
Expected Auxiliary Space Complexity: O(V), as we store the visited array and queue.
π Solution Code
Code (C++)
β‘ Alternative Approaches
π 2οΈβ£ Recursive BFS Approach
Algorithm Steps:
Use a helper function for recursion.
Process the front element of the queue.
Enqueue unvisited neighbors and call the function recursively.
π Complexity Analysis:
β Time Complexity: O(V + E) - Each vertex and edge are processed once.
β Space Complexity: O(V) - Due to the recursion stack.
β Why This Approach?
Uses recursion instead of iteration, which may be preferred in some functional programming paradigms.
However, recursion depth could lead to stack overflow for large graphs.
π 3οΈβ£ BFS for Disconnected Graphs
Algorithm Steps:
Iterate through all vertices to ensure that all components are covered.
If a vertex is not visited, initiate BFS from it.
This ensures traversal of all disconnected components.
π Complexity Analysis:
β Time Complexity: O(V + E) - Each vertex and edge are processed once.
β Space Complexity: O(V) - Due to the queue and visited array.
β Why This Approach?
Handles disconnected graphs, ensuring all components are explored.
Slightly more complex than basic BFS but necessary for completeness.
π 4οΈβ£ BFS Using Deque (Optimized Queue Handling)
Algorithm Steps:
Instead of
queue<int>, we usedeque<int>for optimized front and back operations.The traversal logic remains the same as the standard BFS approach.
π Complexity Analysis:
β Time Complexity: O(V + E) - Each vertex and edge are processed once.
β Space Complexity: O(V) - Due to the deque and visited array.
β Why This Approach?
Using a
dequecan slightly improve performance in some cases due to optimized operations compared toqueue<int>.Useful when frequent push/pop operations from both ends are required.
π Comparison of Approaches
Approach
β±οΈ Time Complexity
ποΈ Space Complexity
β Pros
β οΈ Cons
Standard BFS (Queue)
π’ O(V + E)
π‘ O(V)
Simple and widely used
Fails for disconnected graphs
Recursive BFS
π’ O(V + E)
π‘ O(V)
Recursive and intuitive
Risk of stack overflow for large graphs
BFS for Disconnected Graphs
π’ O(V + E)
π‘ O(V)
Ensures traversal of all components
Slightly more complex than basic BFS
BFS Using (Deque)
π’ O(V + E)
π‘ O(V)
Optimized performance using deque
Marginal improvement over normal queue
β Best Choice?
Use Standard BFS if the graph is connected and efficiency is the priority.
Use BFS for Disconnected Graphs when handling multiple components.
Use Recursive BFS only if recursion depth is not an issue.
Use Deque BFS if frequent front and back operations are needed.
Code (Java)
Code (Python)
π― Contribution and Support:
For discussions, questions, or doubts related to this solution, feel free to connect on LinkedIn: Any Questions. Letβs make this learning journey more collaborative!
β If you find this helpful, please give this repository a star! β
πVisitor Count
Last updated