@@ -12,19 +12,57 @@ def __init__(self, n=0): # a graph with Node 0,1,...,N-1
12
12
] # dp[i][j] stores minimum distance from i to j
13
13
14
14
def add_edge (self , u , v , w ):
15
+ """
16
+ Adds a directed edge from node u
17
+ to node v with weight w.
18
+
19
+ >>> g = Graph(3)
20
+ >>> g.add_edge(0, 1, 5)
21
+ >>> g.dp[0][1]
22
+ 5
23
+ """
15
24
self .dp [u ][v ] = w
16
25
17
26
def floyd_warshall (self ):
27
+ """
28
+ Computes the shortest paths between all pairs of
29
+ nodes using the Floyd-Warshall algorithm.
30
+
31
+ >>> g = Graph(3)
32
+ >>> g.add_edge(0, 1, 1)
33
+ >>> g.add_edge(1, 2, 2)
34
+ >>> g.floyd_warshall()
35
+ >>> g.show_min(0, 2)
36
+ 3
37
+ >>> g.show_min(2, 0)
38
+ inf
39
+ """
18
40
for k in range (self .n ):
19
41
for i in range (self .n ):
20
42
for j in range (self .n ):
21
43
self .dp [i ][j ] = min (self .dp [i ][j ], self .dp [i ][k ] + self .dp [k ][j ])
22
44
23
45
def show_min (self , u , v ):
46
+ """
47
+ Returns the minimum distance from node u to node v.
48
+
49
+ >>> g = Graph(3)
50
+ >>> g.add_edge(0, 1, 3)
51
+ >>> g.add_edge(1, 2, 4)
52
+ >>> g.floyd_warshall()
53
+ >>> g.show_min(0, 2)
54
+ 7
55
+ >>> g.show_min(1, 0)
56
+ inf
57
+ """
24
58
return self .dp [u ][v ]
25
59
26
60
27
61
if __name__ == "__main__" :
62
+ import doctest
63
+ doctest .testmod ()
64
+
65
+ # Example usage
28
66
graph = Graph (5 )
29
67
graph .add_edge (0 , 2 , 9 )
30
68
graph .add_edge (0 , 4 , 10 )
@@ -38,5 +76,5 @@ def show_min(self, u, v):
38
76
graph .add_edge (4 , 2 , 4 )
39
77
graph .add_edge (4 , 3 , 9 )
40
78
graph .floyd_warshall ()
41
- graph .show_min (1 , 4 )
42
- graph .show_min (0 , 3 )
79
+ print ( graph .show_min (1 , 4 )) # Should output the minimum distance from node 1 to node 4
80
+ print ( graph .show_min (0 , 3 )) # Should output the minimum distance from node 0 to node 3
0 commit comments