Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit ea7015a

Browse files
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)

AltStyle によって変換されたページ (->オリジナル) /