Write a C program for Bellman Ford Algorithm in a Graph.
BEGIN
d(v[1]) ← 0
FOR j = 2,..,n DO
d(v[j]) ← ∞
FOR i = 1,..,(|V|-1) DO
FOR ALL (u,v) in E DO
d(v) ← min(d(v), d(u)+l(u,v))
FOR ALL (u,v) in E DO
IF d(v) > d(u) + l(u,v) DO
Message: "Negative Circle"
END
#include <stdio.h>
#include <limits.h>
#define MAX_VERTICES 100
#define MAX_EDGES 100
typedef struct {
int u, v, weight;
} Edge;
int numVertices, numEdges;
int distance[MAX_VERTICES];
Edge edges[MAX_EDGES];
void bellmanFord(int startVertex) {
distance[startVertex] = 0;
for (int j = 1; j <= numVertices; j++) {
if (j != startVertex) {
distance[j] = INT_MAX;
}
}
for (int i = 1; i <= numVertices - 1; i++) {
for (int k = 0; k < numEdges; k++) {
int u = edges[k].u;
int v = edges[k].v;
int weight = edges[k].weight;
if (distance[u] != INT_MAX && distance[u] + weight < distance[v]) {
distance[v] = distance[u] + weight;
}
}
}
for (int k = 0; k < numEdges; k++) {
int u = edges[k].u;
int v = edges[k].v;
int weight = edges[k].weight;
if (distance[u] != INT_MAX && distance[u] + weight < distance[v]) {
printf("Negative Circle\n");
return;
}
}
}
int main() {
scanf("%d %d", &numVertices, &numEdges);
for (int i = 0; i < numEdges; i++) {
scanf("%d %d %d", &edges[i].u, &edges[i].v, &edges[i].weight);
}
int startVertex;
scanf("%d", &startVertex);
bellmanFord(startVertex);
for (int i = 1; i <= numVertices; i++) {
printf("Vertex %d: Distance = %d\n", i, distance[i]);
}
return 0;
}
5 8
1 2 3
1 3 6
2 3 -2
2 4 5
3 4 4
3 5 2
4 2 -7
5 4 1
1
Negative Circle
Vertex 1: Distance = 0
Vertex 2: Distance = -17
Vertex 3: Distance = -14
Vertex 4: Distance = -11
Vertex 5: Distance = -12
Published by Md. Anisur Rahman
I am Md. Anisur Rahman. I have completed Cyber Security for MSCSE at United International University in 2022.I have completed PGDIT from IIT, Jahangirnagar University in 2020. I'm a Head of IT at Programming24 School.
View all posts by Md. Anisur Rahman