1
+
2
+ # Bellman-Ford algorithm
3
+ # Find shortest paths from one vertex,
4
+ # to all other vertices in weighted graph.
5
+ # Runtime O(V*E)
6
+
7
+ class Graph :
8
+ def __init__ (self ):
9
+ self .vertices : list = []
10
+ self .edges : list = []
11
+ self .distance : dict = {}
12
+ self .prev : dict = {}
13
+
14
+ def add_vertex (self , label : str ):
15
+ self .vertices .append (label )
16
+ self .distance [label ] = None
17
+ self .prev [label ] = None
18
+
19
+ def add_edge (self , label1 : str , label2 : str , weight : int ):
20
+ self .edges .append ([label1 , label2 , weight ])
21
+
22
+ def bellman_ford (self , source : str ):
23
+ self .distance [source ] = 0
24
+
25
+ for _ in range (len (self .vertices )):
26
+
27
+ for edge in self .edges :
28
+ label1 : str = edge [0 ]
29
+ label2 : str = edge [1 ]
30
+ weight : int = edge [2 ]
31
+
32
+ if self .distance [label1 ] is None :
33
+ continue
34
+ if self .distance [label2 ] is None :
35
+ self .distance [label2 ] = self .distance [label1 ] + weight
36
+ self .prev [label2 ] = label1
37
+ continue
38
+ if self .distance [label1 ] + weight < self .distance [label2 ]:
39
+ self .distance [label2 ] = self .distance [label1 ] + weight
40
+ self .prev [label2 ] = label1
41
+ continue
42
+
43
+ def print_distances (self , source : str ):
44
+ for v in self .vertices :
45
+ if v != source :
46
+ distance : int = self .distance [v ]
47
+ print (f'Distance from { source } to { v } is { distance } ' )
0 commit comments