Skip to content

Commit f026147

Browse files
committed
Dijkstra
1 parent 8fab2d9 commit f026147

File tree

1 file changed

+107
-0
lines changed

1 file changed

+107
-0
lines changed

Graph/dijkstra.py

Lines changed: 107 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,107 @@
1+
import sys;
2+
import heapq;
3+
4+
class Edge(object):
5+
6+
def __init__(self, weight, startVertex, targetVertex):
7+
self.weight = weight;
8+
self.startVertex = startVertex;
9+
self.targetVertex = targetVertex;
10+
11+
class Node(object):
12+
13+
def __init__(self, name):
14+
self.name = name;
15+
self.visited = False;
16+
self.predecessor = None;
17+
self.adjacenciesList = [];
18+
self.minDistance = sys.maxsize;
19+
20+
def __cmp__(self, otherVertex):
21+
return self.cmp(self.minDistance, otherVertex.minDistance);
22+
23+
def __lt__(self, other):
24+
selfPriority = self.minDistance;
25+
otherPriority = other.minDistance;
26+
return selfPriority < otherPriority;
27+
28+
class Algorithm(object):
29+
30+
def calculateShortestPath(self, vertexList, startVertex):
31+
32+
q = [];
33+
startVertex.minDistance = 0;
34+
heapq.heappush(q, startVertex);
35+
36+
while q:
37+
38+
actualVertex = heapq.heappop(q);
39+
40+
for edge in actualVertex.adjacenciesList:
41+
u = edge.startVertex;
42+
v = edge.targetVertex;
43+
newDistance = u.minDistance + edge.weight;
44+
45+
if newDistance < v.minDistance:
46+
v.predecessor = u;
47+
v.minDistance = newDistance;
48+
heapq.heappush(q, v);
49+
50+
def getShortestPathTo(self, targetVertex):
51+
print("Shortest path to vertex is: ", targetVertex.minDistance);
52+
53+
node = targetVertex;
54+
55+
while node is not None:
56+
print("%s " % node.name);
57+
node = node.predecessor;
58+
59+
node1 = Node("A");
60+
node2 = Node("B");
61+
node3 = Node("C");
62+
node4 = Node("D");
63+
node5 = Node("E");
64+
node6 = Node("F");
65+
node7 = Node("G");
66+
node8 = Node("H");
67+
68+
edge1 = Edge(5,node1,node2);
69+
edge2 = Edge(8,node1,node8);
70+
edge3 = Edge(9,node1,node5);
71+
edge4 = Edge(15,node2,node4);
72+
edge5 = Edge(12,node2,node3);
73+
edge6 = Edge(4,node2,node8);
74+
edge7 = Edge(7,node8,node3);
75+
edge8 = Edge(6,node8,node6);
76+
edge9 = Edge(5,node5,node8);
77+
edge10 = Edge(4,node5,node6);
78+
edge11 = Edge(20,node5,node7);
79+
edge12 = Edge(1,node6,node3);
80+
edge13 = Edge(13,node6,node7);
81+
edge14 = Edge(3,node3,node4);
82+
edge15 = Edge(11,node3,node7);
83+
edge16 = Edge(9,node4,node7);
84+
85+
node1.adjacenciesList.append(edge1);
86+
node1.adjacenciesList.append(edge2);
87+
node1.adjacenciesList.append(edge3);
88+
node2.adjacenciesList.append(edge4);
89+
node2.adjacenciesList.append(edge5);
90+
node2.adjacenciesList.append(edge6);
91+
node8.adjacenciesList.append(edge7);
92+
node8.adjacenciesList.append(edge8);
93+
node5.adjacenciesList.append(edge9);
94+
node5.adjacenciesList.append(edge10);
95+
node5.adjacenciesList.append(edge11);
96+
node6.adjacenciesList.append(edge12);
97+
node6.adjacenciesList.append(edge13);
98+
node3.adjacenciesList.append(edge14);
99+
node3.adjacenciesList.append(edge15);
100+
node4.adjacenciesList.append(edge16);
101+
102+
103+
vertexList = (node1,node2,node3, node4, node5, node6, node7, node8);
104+
105+
algorithm = Algorithm();
106+
algorithm.calculateShortestPath(vertexList, node1);
107+
algorithm.getShortestPathTo(node4);

0 commit comments

Comments
 (0)