Skip to content

Commit ea7015a

Browse files
committed
Bellman Ford Algo code added
1 parent 7b513d1 commit ea7015a

File tree

8 files changed

+534
-43
lines changed

8 files changed

+534
-43
lines changed

Bellman-Ford-Algorithm/.idea/Bellman-Ford-Algorithm.iml

Lines changed: 11 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Bellman-Ford-Algorithm/.idea/misc.xml

Lines changed: 4 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Bellman-Ford-Algorithm/.idea/modules.xml

Lines changed: 8 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Bellman-Ford-Algorithm/.idea/workspace.xml

Lines changed: 313 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Lines changed: 130 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,130 @@
1+
# Bellman Ford Algorithm for Shortest Path
2+
3+
import sys
4+
5+
# Function to create Nodes
6+
class Node(object):
7+
def __init__(self,name):
8+
self.name = name
9+
self.visited = False
10+
self.predecessor = None
11+
self.adjacencyList = []
12+
# Distance from starting vertex/Node
13+
self.minDistance = sys.maxsize
14+
15+
# Function to create Edges
16+
class Edge(object):
17+
def __init__(self, weight, startVertex, targetVertex):
18+
self.weight = weight
19+
self.startVertex = startVertex
20+
self.targetVertex = targetVertex
21+
22+
23+
# Bellman Ford Algorithm
24+
class BellmanFord(object):
25+
# Initially set the Negative cycle flag to False
26+
HAS_CYCLE = False
27+
28+
# Calculate the Shortest Path
29+
def calculateShortestPath(self, vertexList, edgeList, startVertex):
30+
startVertex.minDistance = 0
31+
for i in range(0,len(vertexList)-1):
32+
for edge in edgeList:
33+
u = edge.startVertex
34+
v = edge.targetVertex
35+
36+
newDistance = u.minDistance + edge.weight
37+
if newDistance < v.minDistance:
38+
v.minDistance = newDistance
39+
v.predecessor = u
40+
41+
for edge in edgeList:
42+
if self.hasCycle(edge):
43+
print('Negative cycle detected...')
44+
BellmanFord.HAS_CYCLE=True
45+
46+
47+
# Check if a negative cycle exists or not
48+
def hasCycle(self,edge):
49+
if (edge.startVertex.minDistance + edge.weight) < edge.targetVertex.minDistance:
50+
return True
51+
else:
52+
return False
53+
54+
55+
# Traceback and Print the Shortest Path
56+
def getShortestPath(self, targetVertex):
57+
if not BellmanFord.HAS_CYCLE:
58+
print('Shortest path exists with value: ', targetVertex.minDistance)
59+
node = targetVertex
60+
while node is not None:
61+
print('%s' % node.name)
62+
node = node.predecessor
63+
else:
64+
print('Negative cycle detected...')
65+
66+
67+
68+
69+
# -------------------------- Testing ------------------------------
70+
if __name__ == '__main__':
71+
# Create Nodes
72+
node1 = Node('A')
73+
node2 = Node('B')
74+
node3 = Node('C')
75+
node4 = Node('D')
76+
node5 = Node('E')
77+
node6 = Node('F')
78+
node7 = Node('G')
79+
node8 = Node('H')
80+
81+
# Create Edges
82+
# Edge Weight, Starting Vertex, Ending Vertex
83+
edge1 = Edge(5,node1, node2)
84+
edge2 = Edge(8, node1, node8)
85+
edge3 = Edge(9, node1, node5)
86+
edge4 = Edge(15, node2, node4)
87+
edge5 = Edge(12, node2, node3)
88+
edge6 = Edge(4, node2, node8)
89+
edge7 = Edge(7, node8, node3)
90+
edge8 = Edge(6, node8, node6)
91+
edge9 = Edge(5, node5, node8)
92+
edge10 = Edge(4, node5, node6)
93+
edge11 = Edge(20, node5, node7)
94+
edge12 = Edge(1, node6, node3)
95+
edge13 = Edge(13, node6, node7)
96+
edge14 = Edge(3, node3, node4)
97+
edge15 = Edge(11, node3, node7)
98+
edge16 = Edge(9, node4, node7)
99+
100+
# Adjacency List, append edges
101+
node1.adjacencyList.append(edge1)
102+
node1.adjacencyList.append(edge2)
103+
node1.adjacencyList.append(edge3)
104+
node2.adjacencyList.append(edge4)
105+
node2.adjacencyList.append(edge5)
106+
node2.adjacencyList.append(edge6)
107+
node8.adjacencyList.append(edge7)
108+
node8.adjacencyList.append(edge8)
109+
node5.adjacencyList.append(edge9)
110+
node5.adjacencyList.append(edge10)
111+
node5.adjacencyList.append(edge11)
112+
node6.adjacencyList.append(edge12)
113+
node6.adjacencyList.append(edge13)
114+
node3.adjacencyList.append(edge14)
115+
node3.adjacencyList.append(edge15)
116+
node4.adjacencyList.append(edge16)
117+
118+
# Vertex List
119+
vertexList = (node1, node2, node3, node4, node5, node6, node7, node8)
120+
edgeList = (edge1, edge2, edge3, edge4, edge5, edge6, edge7, edge8, edge9, edge10, edge11, edge12, edge13, edge14, edge15, edge16)
121+
122+
algorithm = BellmanFord()
123+
# Calculate Shortest Path with start Vertex node1 : "A"
124+
algorithm.calculateShortestPath(vertexList, edgeList, node1)
125+
# Get the Shortest Path from node1: "A" to node7: "G"
126+
algorithm.getShortestPath(node7)
127+
# Get the Shortest Path from node1: "A" to node4: "D"
128+
algorithm.getShortestPath(node4)
129+
130+
# ----------------------------- EOC -------------------------------

BredthFirstSearch/.idea/workspace.xml

Lines changed: 20 additions & 12 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)