
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 <limits.h>
#define MAXV 100
#define MAXE 1000
void bellmanFord(int V, int E, int edges[][3], int S) {
int dist[MAXV];
for (int i = 0; i < V; i++) dist[i] = INT_MAX;
dist[S] = 0;
for (int i = 1; i < V; i++) {
for (int j = 0; j < E; j++) {
int u = edges[j][0];
int v = edges[j][1];
int wt = edges[j][2];
if (dist[u] != INT_MAX && dist[u] + wt < dist[v]) {
dist[v] = dist[u] + wt;
}
}
}
for (int j = 0; j < E; j++) {
int u = edges[j][0];
int v = edges[j][1];
int wt = edges[j][2];
if (dist[u] != INT_MAX && dist[u] + wt < dist[v]) {
printf("-1\n");
return;
}
}
for (int i = 0; i < V; i++) {
printf("%d ", dist[i]);
}
printf("\n");
}
int main() {
int edges1[5][3] = {{0,1,5},{0,2,4},{1,3,3},{2,1,6},{3,2,-2}};
printf("Shortest paths:\n");
bellmanFord(5, 5, edges1, 0);
int edges2[3][3] = {{0,1,1},{1,2,-1},{2,0,-1}};
printf("Cycle detection:\n");
bellmanFord(3, 3, edges2, 0);
return 0;
}