Topological sorting is a linear ordering of vertices in a directed acyclic graph (DAG) such that for every directed edge u → v
, vertex u
comes before v
in the ordering. This is useful in scenarios like task scheduling where certain tasks must be completed before others.
Program Structure
The following C program implements topological sorting using Kahn’s algorithm, which relies on the concept of in-degree of vertices. The program consists of the following parts:
- Graph Representation: We represent the graph using an adjacency list.
- In-degree Calculation: We calculate the in-degrees of all vertices.
- Topological Sort Function: We implement the main logic to perform the topological sort.
- Main Function: It initializes the graph and calls the topological sort function.
C Program
#include #include #define MAX_VERTICES 100 typedef struct { int adj[MAX_VERTICES][MAX_VERTICES]; int num_vertices; } Graph; void initialize_graph(Graph* g, int vertices) { g->num_vertices = vertices; for (int i = 0; i < vertices; i++) { for (int j = 0; j < vertices; j++) { g->adj[i][j] = 0; } } } void add_edge(Graph* g, int start, int end) { g->adj[start][end] = 1; } void topological_sort(Graph* g) { int in_degree[MAX_VERTICES] = {0}; int sorted[MAX_VERTICES]; int index = 0; // Calculate in-degrees for (int i = 0; i < g->num_vertices; i++) { for (int j = 0; j < g->num_vertices; j++) { if (g->adj[j][i]) { in_degree[i]++; } } } // Queue to manage vertices with zero in-degree int queue[MAX_VERTICES], front = 0, rear = 0; for (int i = 0; i < g->num_vertices; i++) { if (in_degree[i] == 0) { queue[rear++] = i; } } while (front < rear) { int current = queue[front++]; // Add current vertex to sorted array sorted[index++] = current; for (int i = 0; i < g->num_vertices; i++) { if (g->adj[current][i]) { in_degree[i]--; if (in_degree[i] == 0) { queue[rear++] = i; } } } } // Print sorted vertices printf("Topological Sort Order: "); for (int i = 0; i < index; i++) { printf("%d ", sorted[i]); } printf("\n"); } int main() { Graph g; initialize_graph(&g, 6); add_edge(&g, 5, 2); add_edge(&g, 5, 0); add_edge(&g, 4, 0); add_edge(&g, 4, 1); add_edge(&g, 2, 3); add_edge(&g, 3, 1); topological_sort(&g); return 0; }
How to Compile and Run
To compile and run the program:
- Save the code in a file named
topological_sort.c
. - Open a terminal and navigate to the directory containing the file.
- Compile the program using
gcc topological_sort.c -o topological_sort
. - Run the program using
./topological_sort
.
Conclusion
This program provides a straightforward implementation of topological sorting using Kahn’s algorithm. Understanding how to manipulate graph data structures is essential for solving complex problems in computer science.