
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>
#include <limits.h>
#define MAX 100
typedef struct {
int u, v, w;
} Edge;
int adj[MAX][MAX], indegree[MAX], stack[MAX], top = -1;
int dist[MAX];
void topoSortUtil(int v, int visited[], int n) {
visited[v] = 1;
for (int i = 0; i < n; i++) {
if (adj[v][i] != 0 && !visited[i]) {
topoSortUtil(i, visited, n);
}
}
stack[++top] = v;
}
void shortestPathDAG(int n) {
int visited[MAX] = {0};
for (int i = 0; i < n; i++) {
if (!visited[i]) topoSortUtil(i, visited, n);
}
for (int i = 0; i < n; i++) dist[i] = INT_MAX;
dist[0] = 0;
while (top != -1) {
int u = stack[top--];
if (dist[u] != INT_MAX) {
for (int v = 0; v < n; v++) {
if (adj[u][v] != 0 && dist[u] + adj[u][v] < dist[v]) {
dist[v] = dist[u] + adj[u][v];
}
}
}
}
printf("Shortest distances from node 0:\n");
for (int i = 0; i < n; i++) {
printf("%d ", dist[i]);
}
printf("\n");
}
int main() {
int n = 6;
int edges[][3] = {{0,1,2},{0,4,1},{1,2,3},{4,2,2},{2,3,6},{4,5,4},{5,3,1}};
int m = sizeof(edges)/sizeof(edges[0]);
for (int i = 0; i < n; i++)
for (int j = 0; j < n; j++)
adj[i][j] = 0;
for (int i = 0; i < m; i++) {
adj[edges[i][0]][edges[i][1]] = edges[i][2];
}
shortestPathDAG(n);
return 0;
}