@@ -29,6 +29,47 @@ def kruskal(self):
29
29
forest .union (edge [0 ], edge [1 ])
30
30
return ans
31
31
32
+ def edge_exists (self , start , vertex ):
33
+ for edge in self .edges :
34
+ if start == edge [0 ] and vertex == edge [1 ]:
35
+ return (True , edge [2 ])
36
+ return (False , - 1 )
37
+
38
+ def minimum_dist (self , distance , visited ):
39
+ minimum = float ("inf" )
40
+ min_index = - 1
41
+ for vert in self .vertices :
42
+ if distance [vert ] < minimum and vert not in visited :
43
+ minimum = distance [vert ]
44
+ min_index = vert
45
+
46
+ return min_index
47
+
48
+ def get_weight (self , start , end ):
49
+ for edge in self .edges :
50
+ if start == edge [0 ] and end == edge [1 ]:
51
+ return edge [2 ]
52
+ return float ("inf" )
53
+
54
+ def dijkstra_single_source (self , start ):
55
+ visited = []
56
+ distance = [0 ] * len (self .vertices )
57
+ for vertex in self .vertices :
58
+ (exists , weight ) = self .edge_exists (start , vertex )
59
+ if vertex != start and exists :
60
+ distance [vertex ] = weight
61
+ else :
62
+ distance [vertex ] = float ("inf" )
63
+ while len (visited ) != len (self .vertices ):
64
+ u = self .minimum_dist (distance , visited )
65
+ visited .append (u )
66
+ for vert in self .vertices :
67
+ if vert not in visited :
68
+ distance [vert ] = min (
69
+ distance [vert ], distance [u ] + self .get_weight (u , vert ))
70
+
71
+ print (distance )
72
+
32
73
33
74
if __name__ == "__main__" :
34
75
g = WeightedGraph ()
@@ -43,3 +84,4 @@ def kruskal(self):
43
84
g .add_edge (4 , 5 , 5 )
44
85
g .add_edge (5 , 6 , 3 )
45
86
print (g .kruskal ())
87
+ g .dijkstra_single_source (0 )
0 commit comments