Back
4
#include <iostream>
#include <vector>
using namespace std;
int INT_MAX = 1e9;
struct Edge {
int src, dest, weight;
};
void bellmanFord(int V, int E, int src, vector<Edge>& edges) {
vector<int> dist(V, INT_MAX);
dist[src] = 0;
for (int i = 1; i <= V - 1; i++) {
for (int j = 0; j < E; j++) {
int u = edges[j].src;
int v = edges[j].dest;
int weight = edges[j].weight;
if (dist[u] != INT_MAX && dist[u] + weight < dist[v]) {
dist[v] = dist[u] + weight;
}
}
}
for (int i = 0; i < E; i++) {
int u = edges[i].src;
int v = edges[i].dest;
int weight = edges[i].weight;
if (dist[u] != INT_MAX && dist[u] + weight < dist[v]) {
cout << "Graph contains negative weight cycle" << endl;
return;
}
}
cout << "Vertex Distance from Source" << endl;
for (int i = 0; i < V; i++) {
cout << i << "\t\t" << (dist[i] == INT_MAX ? -1 : dist[i]) << endl;
}
}
int main() {
int V, E, src;
cout << "Enter number of vertices and edges: ";
cin >> V >> E;
vector<Edge> edges(E);
cout << "Enter edges (source, destination, weight):" << endl;
for (int i = 0; i < E; i++) {
cin >> edges[i].src >> edges[i].dest >> edges[i].weight;
}
cout << "Enter source vertex: ";
cin >> src;
bellmanFord(V, E, src, edges);
return 0;
}