π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:
[0, 1, 2, 3, 4]
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:
adj = [[1, 2],
[0, 3],
[0, 3, 4],
[1, 2],
[2]]
Output:
[0, 1, 2, 3, 4]
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
0
and 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++)
class Solution {
public:
vector<int> bfs(vector<vector<int>>& adj) {
int V = adj.size();
vector<int> res;
vector<bool> vis(V, false);
queue<int> q;
q.push(0);
vis[0] = true;
while (!q.empty()) {
int v = q.front();
q.pop();
res.push_back(v);
for (int u : adj[v]) {
if (!vis[u]) {
vis[u] = true;
q.push(u);
}
}
}
return res;
}
};
Code (Java)
class Solution {
public ArrayList<Integer> bfs(ArrayList<ArrayList<Integer>> adj) {
ArrayList<Integer> r = new ArrayList<>();
boolean[] v = new boolean[adj.size()];
Queue<Integer> q = new LinkedList<>();
q.add(0);
v[0] = true;
while (!q.isEmpty()) {
int i = q.poll();
r.add(i);
for (int j : adj.get(i)) {
if (!v[j]) {
v[j] = true;
q.add(j);
}
}
}
return r;
}
}
Code (Python)
from collections import deque
class Solution:
def bfs(self, adj):
r, v = [], [False] * len(adj)
q = deque([0])
v[0] = True
while q:
i = q.popleft()
r.append(i)
for j in adj[i]:
if not v[j]:
v[j] = True
q.append(j)
return r
π― 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