Design and implement C/C++ Program to obtain the Topological ordering of
vertices in a given digraph.
#include <stdio.h>
#define MAX 20 // Maximum number of vertices
int n, m; // n = number of vertices, m = number of edges
int adj[MAX][MAX]; // Adjacency matrix representation of graph
int visited[MAX]; // Array to mark visited vertices
int stack[MAX], top = -1; // Stack to store topological order
// DFS function to visit vertices
void DFS(int v) {
visited[v] = 1; // Mark current vertex as visited
// Visit all adjacent vertices
for (int i = 0; i < n; i++) {
if (adj[v][i] == 1 && !visited[i]) {
DFS(i); // Recursive DFS call
}
}
stack[++top] = v; // Push vertex into stack after visiting all its neighbours
}
int main() {
printf("Enter number of vertices: "); // Input number of vertices
scanf("%d", &n);
printf("Enter number of edges: "); // Input number of edges
scanf("%d", &m);
printf("Enter edges (u v) meaning u -> v:\n"); // Input directed edges
for (int i = 0; i < m; i++) {
int u, v;
scanf("%d %d", &u, &v);
adj[u][v] = 1; // Mark edge in adjacency matrix
}
for (int i = 0; i < n; i++) // Initialize all vertices as unvisited
visited[i] = 0;
for (int i = 0; i < n; i++) { // Perform DFS for each unvisited vertex
if (!visited[i])
DFS(i);
}
printf("Topological Order:\n"); // Print topological order by popping stack
while (top != -1)
printf("%d ", stack[top--]);
return 0;
}