This C++ program implements the Bellman-Ford algorithm to find the shortest paths from a source vertex to all other vertices in a weighted graph. It first initializes all distances from the source to infinity, then relaxes all edges V-1 times to find shortest paths without negative cycles. Finally, it checks for negative weight cycles by relaxing edges one more time.
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
0 ratings0% found this document useful (0 votes)
146 views3 pages
Bellman-Ford C++
This C++ program implements the Bellman-Ford algorithm to find the shortest paths from a source vertex to all other vertices in a weighted graph. It first initializes all distances from the source to infinity, then relaxes all edges V-1 times to find shortest paths without negative cycles. Finally, it checks for negative weight cycles by relaxing edges one more time.
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
You are on page 1/ 3
// A C++ program for Bellman-Ford's single source
// shortest path algorithm.
#include <bits/stdc++.h>
// a structure to represent a weighted edge in graph
struct Edge { int src, dest, weight; };
// a structure to represent a connected, directed and
// weighted graph struct Graph { // V-> Number of vertices, E-> Number of edges int V, E;
// graph is represented as an array of edges.
struct Edge* edge; };
// Creates a graph with V vertices and E edges
struct Graph* createGraph(int V, int E) { struct Graph* graph = new Graph; graph->V = V; graph->E = E; graph->edge = new Edge[E]; return graph; }
// A utility function used to print the solution
void printArr(int dist[], int n) { printf("Vertex Distance from Source\n"); for (int i = 0; i < n; ++i) printf("%d \t\t %d\n", i, dist[i]); }
// The main function that finds shortest distances from src to
// all other vertices using Bellman-Ford algorithm. The function // also detects negative weight cycle void BellmanFord(struct Graph* graph, int src) { int V = graph->V; int E = graph->E; int dist[V];
// Step 1: Initialize distances from src to all other vertices
// as INFINITE for (int i = 0; i < V; i++) dist[i] = INT_MAX; dist[src] = 0;
// Step 2: Relax all edges |V| - 1 times. A simple shortest
// path from src to any other vertex can have at-most |V| - 1 // edges for (int i = 1; i <= V-1; i++) { for (int j = 0; j < E; j++) { int u = graph->edge[j].src; int v = graph->edge[j].dest; int weight = graph->edge[j].weight; if (dist[u] != INT_MAX && dist[u] + weight < dist[v]) dist[v] = dist[u] + weight; } }
// Step 3: check for negative-weight cycles. The above step
// guarantees shortest distances if graph doesn't contain // negative weight cycle. If we get a shorter path, then there // is a cycle. for (int i = 0; i < E; i++) { int u = graph->edge[i].src; int v = graph->edge[i].dest; int weight = graph->edge[i].weight; if (dist[u] != INT_MAX && dist[u] + weight < dist[v]) printf("Graph contains negative weight cycle"); }
printArr(dist, V);
return; }
// Driver program to test above functions
int main() { /* Let us create the graph given in above example */ int V = 5; // Number of vertices in graph int E = 8; // Number of edges in graph struct Graph* graph = createGraph(V, E);
Ethanolamine and Phosphoethanolamine Inhibit Mitochondrial Function in Vitro - Implications For Mitochondrial Dysfunction Hypothesis in Depression and Bipolar Disorder - ScienceDirect