
About the author
Mallikarjuna Mallisetty
General programming
Mallikarjuna shares practical programming tutorials and foundational concepts designed to help developers learn by building and experimenting.
View LinkedIn profile ↗#include <stdio.h>
#include <stdlib.h>
#define MAX 1000
int adj[MAX][MAX], inDegree[MAX], queue[MAX];
int front = 0, rear = -1;
void findOrder(int n, int prerequisites[][2], int m) {
for (int i = 0; i < m; i++) {
int a = prerequisites[i][0];
int b = prerequisites[i][1];
adj[b][a] = 1;
inDegree[a]++;
}
for (int i = 0; i < n; i++) {
if (inDegree[i] == 0) queue[++rear] = i;
}
int result[MAX], idx = 0;
while (front <= rear) {
int node = queue[front++];
result[idx++] = node;
for (int i = 0; i < n; i++) {
if (adj[node][i]) {
inDegree[i]--;
if (inDegree[i] == 0) queue[++rear] = i;
}
}
}
if (idx != n) printf("[]\n");
else {
printf("[ ");
for (int i = 0; i < idx; i++) printf("%d ", result[i]);
printf("]\n");
}
}
int main() {
int prerequisites1[][2] = {{1, 0}};
findOrder(2, prerequisites1, 1);
int prerequisites2[][2] = {{1, 0}, {2, 0}, {3, 1}, {3, 2}};
findOrder(4, prerequisites2, 4);
return 0;
}| Case | Time Complexity | Explanation |
|---|---|---|
| Best Case | O(V + E) | In all cases, we must visit every node and edge to build the graph and perform topological sorting. |
| Average Case | O(V + E) | Each course and each prerequisite relation must be examined exactly once. |
| Worst Case | O(V + E) | Even with complex dependencies, we still process every node and edge once for sorting and cycle detection. |