From 730c7c111b3c9911c41a924394cd0ae9713b6654 Mon Sep 17 00:00:00 2001 From: sayon-iiit Date: Sun, 27 Oct 2019 02:05:48 +0530 Subject: [PATCH] BELLMAN_FORD FOR HACTOBERFEST --- BELLMAN_FORD.cpp | 130 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 130 insertions(+) create mode 100644 BELLMAN_FORD.cpp diff --git a/BELLMAN_FORD.cpp b/BELLMAN_FORD.cpp new file mode 100644 index 0000000..ee68c96 --- /dev/null +++ b/BELLMAN_FORD.cpp @@ -0,0 +1,130 @@ + +#include +#include +using namespace std; + +struct Edge { + int src, dest, weight; +}; + + +struct Graph { + + int V, E; + + + struct Edge* edge; +}; + + +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; +} + +void printArr(int dist[], int n) +{ + printf("Vertex Distance from Source 'S or 0'\n"); + for (int i = 0; i < n; ++i) + printf("%d \t\t %d\n", i, dist[i]); +} + + +void BellmanFord(struct Graph* graph, int src) +{ + int V = graph->V; + int E = graph->E; + int dist[V]; + + + for (int i = 0; i < V; i++) + dist[i] = INT_MAX; + dist[src] = 0; + + + 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; + } + } + + + + printArr(dist, V); + + return; +} + + +int main() +{ + +cout<<"CONSIDERING: "< 0"< 1"< 2"< 3"< 4"<edge[0].src = 0; + graph->edge[0].dest = 1; + graph->edge[0].weight = 6; + + + graph->edge[1].src = 0; + graph->edge[1].dest = 3; + graph->edge[1].weight = 7; + + + graph->edge[2].src = 1; + graph->edge[2].dest = 3; + graph->edge[2].weight = 8; + + + graph->edge[3].src = 1; + graph->edge[3].dest = 2; + graph->edge[3].weight = 5; + + + graph->edge[4].src = 1; + graph->edge[4].dest = 4; + graph->edge[4].weight = -4; + + + graph->edge[5].src = 2; + graph->edge[5].dest = 1; + graph->edge[5].weight = -2; + + graph->edge[6].src = 3; + graph->edge[6].dest = 2; + graph->edge[6].weight = -3; + + graph->edge[7].src = 3; + graph->edge[7].dest = 4; + graph->edge[7].weight = 9; + + graph->edge[8].src = 4; + graph->edge[8].dest = 0; + graph->edge[8].weight = 2; + + graph->edge[9].src = 4; + graph->edge[9].dest = 2; + graph->edge[9].weight = 7; + + BellmanFord(graph, 0); + + return 0; +}