0
0
DSA Cprogramming~20 mins

BFS Breadth First Search on Graph in DSA C - Practice Problems & Challenges

Choose your learning style9 modes available
Challenge - 5 Problems
🎖️
BFS Mastery Badge
Get all challenges correct to earn this badge!
Test your skills under time pressure!
Predict Output
intermediate
2:00remaining
Output of BFS traversal on a simple graph
What is the output of the BFS traversal starting from node 0 in the given graph?
DSA C
/* Graph adjacency list representation:
   0: 1, 2
   1: 0, 3
   2: 0, 4
   3: 1
   4: 2
*/

void bfs(int start, int graph[][5], int n) {
    int queue[10], front = 0, rear = 0;
    int visited[5] = {0};
    queue[rear++] = start;
    visited[start] = 1;

    while (front < rear) {
        int node = queue[front++];
        printf("%d ", node);
        for (int i = 0; i < n; i++) {
            if (graph[node][i] == 1 && !visited[i]) {
                queue[rear++] = i;
                visited[i] = 1;
            }
        }
    }
}

int main() {
    int graph[5][5] = {
        {0,1,1,0,0},
        {1,0,0,1,0},
        {1,0,0,0,1},
        {0,1,0,0,0},
        {0,0,1,0,0}
    };
    bfs(0, graph, 5);
    return 0;
}
A[0, 2, 1, 4, 3]
B[0, 1, 2, 3, 4]
C[0, 1, 3, 2, 4]
D[0, 2, 4, 1, 3]
Attempts:
2 left
💡 Hint
Remember BFS visits neighbors level by level starting from the start node.
🧠 Conceptual
intermediate
1:30remaining
Number of nodes visited in BFS
Given a graph with 6 nodes where node 5 is disconnected, how many nodes will BFS visit starting from node 0?
A6
B1
C4
D5
Attempts:
2 left
💡 Hint
BFS only visits nodes reachable from the start node.
🔧 Debug
advanced
2:00remaining
Identify the error in BFS implementation
What error will this BFS code produce when run on a graph with 4 nodes?
DSA C
void bfs(int start, int graph[][4], int n) {
    int queue[10], front = 0, rear = 0;
    int visited[4] = {0};
    queue[rear++] = start;
    visited[start] = 1;

    while (front < rear) {
        int node = queue[front++];
        printf("%d ", node);
        for (int i = 0; i < n; i++) {
            if (graph[node][i] == 1 && !visited[i]) {
                queue[rear++] = i;
                visited[i] = 1;
            }
        }
    }
}
ARuns correctly and prints BFS order
BRuntime error due to accessing queue out of bounds
CCompilation error due to wrong array size
DInfinite loop because front never exceeds rear
Attempts:
2 left
💡 Hint
Check the loop condition carefully.
🚀 Application
advanced
2:30remaining
Shortest path length using BFS
Using BFS on an unweighted graph, what is the shortest path length from node 0 to node 4?
DSA C
/* Graph adjacency list:
0: 1, 2
1: 3
2: 4
3: 4
4: 
*/

int bfs_shortest_path(int start, int end, int graph[][5], int n) {
    int queue[10], front = 0, rear = 0;
    int visited[5] = {0};
    int distance[5] = {0};
    queue[rear++] = start;
    visited[start] = 1;
    distance[start] = 0;

    while (front < rear) {
        int node = queue[front++];
        if (node == end) return distance[node];
        for (int i = 0; i < n; i++) {
            if (graph[node][i] == 1 && !visited[i]) {
                queue[rear++] = i;
                visited[i] = 1;
                distance[i] = distance[node] + 1;
            }
        }
    }
    return -1;
}

int main() {
    int graph[5][5] = {
        {0,1,1,0,0},
        {0,0,0,1,0},
        {0,0,0,0,1},
        {0,0,0,0,1},
        {0,0,0,0,0}
    };
    int dist = bfs_shortest_path(0, 4, graph, 5);
    printf("%d", dist);
    return 0;
}
A1
B3
C2
D4
Attempts:
2 left
💡 Hint
BFS finds shortest path in unweighted graphs by levels.
Predict Output
expert
3:00remaining
BFS traversal order on a directed graph with cycles
What is the BFS traversal order starting from node 0 on the directed graph below?
DSA C
/* Directed graph adjacency matrix:
0 -> 1, 2
1 -> 2, 3
2 -> 0, 3
3 -> 3
*/

void bfs(int start, int graph[][4], int n) {
    int queue[10], front = 0, rear = 0;
    int visited[4] = {0};
    queue[rear++] = start;
    visited[start] = 1;

    while (front < rear) {
        int node = queue[front++];
        printf("%d ", node);
        for (int i = 0; i < n; i++) {
            if (graph[node][i] == 1 && !visited[i]) {
                queue[rear++] = i;
                visited[i] = 1;
            }
        }
    }
}

int main() {
    int graph[4][4] = {
        {0,1,1,0},
        {0,0,1,1},
        {1,0,0,1},
        {0,0,0,1}
    };
    bfs(0, graph, 4);
    return 0;
}
A[0, 1, 2, 3]
B[0, 2, 1, 3]
C[0, 1, 3, 2]
D[0, 2, 3, 1]
Attempts:
2 left
💡 Hint
BFS visits nodes in order of discovery and marks visited to avoid cycles.