From 176c33092544eb0ab7f37b0aa17094848140f985 Mon Sep 17 00:00:00 2001 From: arpanjain97 Date: Fri, 13 Oct 2017 11:31:06 +0530 Subject: [PATCH] Add Bellman-Ford Algorithm --- data_structures/Graph/BellmanFord.py | 52 ++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) create mode 100644 data_structures/Graph/BellmanFord.py diff --git a/data_structures/Graph/BellmanFord.py b/data_structures/Graph/BellmanFord.py new file mode 100644 index 000000000..de3077f09 --- /dev/null +++ b/data_structures/Graph/BellmanFord.py @@ -0,0 +1,52 @@ +def printDist(dist, V): + print("\nVertex Distance") + for i in range(V): + if dist[i] != float('inf') : + print(i,"\t",int(dist[i]),end = "\t") + else: + print(i,"\t","INF",end="\t") + print(); + +def BellmanFord(graph, V, E, src): + mdist=[float('inf') for i in range(V)] + mdist[src] = 0.0; + + for i in range(V-1): + for j in range(V): + u = graph[j]["src"] + v = graph[j]["dst"] + w = graph[j]["weight"] + + if mdist[u] != float('inf') and mdist[u] + w < mdist[v]: + mdist[v] = mdist[u] + w + for j in range(V): + u = graph[j]["src"] + v = graph[j]["dst"] + w = graph[j]["weight"] + + if mdist[u] != float('inf') and mdist[u] + w < mdist[v]: + print("Negative cycle found. Solution not possible.") + return + + printDist(mdist, V) + + + +#MAIN +V = int(input("Enter number of vertices: ")); +E = int(input("Enter number of edges: ")); + +graph = [dict() for j in range(E)] + +for i in range(V): + graph[i][i] = 0.0; + +for i in range(E): + print("\nEdge ",i+1) + src = int(input("Enter source:")) + dst = int(input("Enter destination:")) + weight = float(input("Enter weight:")) + graph[i] = {"src": src,"dst": dst, "weight": weight} + +gsrc = int(input("\nEnter shortest path source:")) +BellmanFord(graph, V, E, gsrc)