From 4218278a436b6d31bf3a7e02a0363592beb5da34 Mon Sep 17 00:00:00 2001 From: Khushi Singh <87067309+singhkhushi3026@users.noreply.github.com> Date: Fri, 23 Dec 2022 00:42:00 +0530 Subject: [PATCH] Create BellmanFordAlgorithm.java --- dynamic-programming/BellmanFordAlgorithm.java | 124 ++++++++++++++++++ 1 file changed, 124 insertions(+) create mode 100644 dynamic-programming/BellmanFordAlgorithm.java diff --git a/dynamic-programming/BellmanFordAlgorithm.java b/dynamic-programming/BellmanFordAlgorithm.java new file mode 100644 index 0000000..e94b0c5 --- /dev/null +++ b/dynamic-programming/BellmanFordAlgorithm.java @@ -0,0 +1,124 @@ +import java.io.*; +import java.lang.*; +import java.util.*; +class Graph { + + // A class to represent a weighted edge in graph + class Edge { + int src, dest, weight; + Edge() { src = dest = weight = 0; } + }; + + int V, E; + Edge edge[]; + + // Creates a graph with V vertices and E edges + Graph(int v, int e) + { + V = v; + E = e; + edge = new Edge[e]; + for (int i = 0; i < e; ++i) + edge[i] = new Edge(); + } + + void BellmanFord(Graph graph, int src) + { + int V = graph.V, E = graph.E; + int dist[] = new int[V]; + + // Step 1: Initialize distances from src to all + // other vertices as INFINITE + for (int i = 0; i < V; ++i) + dist[i] = Integer.MAX_VALUE; + 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; ++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] != Integer.MAX_VALUE + && dist[u] + weight < dist[v]) + dist[v] = dist[u] + weight; + } + } + + 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] != Integer.MAX_VALUE + && dist[u] + weight < dist[v]) { + System.out.println( + "Graph contains negative weight cycle"); + return; + } + } + printArr(dist, V); + } + + + void printArr(int dist[], int V) + { + System.out.println("Vertex Distance from Source"); + for (int i = 0; i < V; ++i) + System.out.println(i + "\t\t" + dist[i]); + } + + // Driver's code + public static void main(String[] args) + { + int V = 5; // Number of vertices in graph + int E = 8; // Number of edges in graph + + Graph graph = new Graph(V, E); + + // add edge 0-1 (or A-B in above figure) + graph.edge[0].src = 0; + graph.edge[0].dest = 1; + graph.edge[0].weight = -1; + + // add edge 0-2 (or A-C in above figure) + graph.edge[1].src = 0; + graph.edge[1].dest = 2; + graph.edge[1].weight = 4; + + // add edge 1-2 (or B-C in above figure) + graph.edge[2].src = 1; + graph.edge[2].dest = 2; + graph.edge[2].weight = 3; + + // add edge 1-3 (or B-D in above figure) + graph.edge[3].src = 1; + graph.edge[3].dest = 3; + graph.edge[3].weight = 2; + + // add edge 1-4 (or B-E in above figure) + graph.edge[4].src = 1; + graph.edge[4].dest = 4; + graph.edge[4].weight = 2; + + // add edge 3-2 (or D-C in above figure) + graph.edge[5].src = 3; + graph.edge[5].dest = 2; + graph.edge[5].weight = 5; + + // add edge 3-1 (or D-B in above figure) + graph.edge[6].src = 3; + graph.edge[6].dest = 1; + graph.edge[6].weight = 1; + + // add edge 4-3 (or E-D in above figure) + graph.edge[7].src = 4; + graph.edge[7].dest = 3; + graph.edge[7].weight = -3; + + // Function call + graph.BellmanFord(graph, 0); + } +} +
Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.
Alternative Proxies: