@@ -9,12 +9,44 @@ def __init__(self):
9
9
10
10
# for printing the Graph vertices
11
11
def print_graph (self ) -> None :
12
+ """
13
+ Print the graph vertices.
14
+
15
+ Example:
16
+ >>> g = Graph()
17
+ >>> g.add_edge(0, 1)
18
+ >>> g.add_edge(0, 2)
19
+ >>> g.add_edge(1, 2)
20
+ >>> g.add_edge(2, 0)
21
+ >>> g.add_edge(2, 3)
22
+ >>> g.add_edge(3, 3)
23
+ >>> g.print_graph()
24
+ {0: [1, 2], 1: [2], 2: [0, 3], 3: [3]}
25
+ 0 -> 1 -> 2
26
+ 1 -> 2
27
+ 2 -> 0 -> 3
28
+ 3 -> 3
29
+ """
12
30
print (self .vertex )
13
31
for i in self .vertex :
14
32
print (i , " -> " , " -> " .join ([str (j ) for j in self .vertex [i ]]))
15
33
16
34
# for adding the edge between two vertices
17
35
def add_edge (self , from_vertex : int , to_vertex : int ) -> None :
36
+ """
37
+ Add an edge between two vertices.
38
+
39
+ :param from_vertex: The source vertex.
40
+ :param to_vertex: The destination vertex.
41
+
42
+ Example:
43
+ >>> g = Graph()
44
+ >>> g.add_edge(0, 1)
45
+ >>> g.add_edge(0, 2)
46
+ >>> g.print_graph()
47
+ {0: [1, 2]}
48
+ 0 -> 1 -> 2
49
+ """
18
50
# check if vertex is already present,
19
51
if from_vertex in self .vertex :
20
52
self .vertex [from_vertex ].append (to_vertex )
@@ -23,6 +55,21 @@ def add_edge(self, from_vertex: int, to_vertex: int) -> None:
23
55
self .vertex [from_vertex ] = [to_vertex ]
24
56
25
57
def dfs (self ) -> None :
58
+ """
59
+ Perform depth-first search (DFS) traversal on the graph
60
+ and print the visited vertices.
61
+
62
+ Example:
63
+ >>> g = Graph()
64
+ >>> g.add_edge(0, 1)
65
+ >>> g.add_edge(0, 2)
66
+ >>> g.add_edge(1, 2)
67
+ >>> g.add_edge(2, 0)
68
+ >>> g.add_edge(2, 3)
69
+ >>> g.add_edge(3, 3)
70
+ >>> g.dfs()
71
+ 0 1 2 3
72
+ """
26
73
# visited array for storing already visited nodes
27
74
visited = [False ] * len (self .vertex )
28
75
@@ -32,18 +79,41 @@ def dfs(self) -> None:
32
79
self .dfs_recursive (i , visited )
33
80
34
81
def dfs_recursive (self , start_vertex : int , visited : list ) -> None :
82
+ """
83
+ Perform a recursive depth-first search (DFS) traversal on the graph.
84
+
85
+ :param start_vertex: The starting vertex for the traversal.
86
+ :param visited: A list to track visited vertices.
87
+
88
+ Example:
89
+ >>> g = Graph()
90
+ >>> g.add_edge(0, 1)
91
+ >>> g.add_edge(0, 2)
92
+ >>> g.add_edge(1, 2)
93
+ >>> g.add_edge(2, 0)
94
+ >>> g.add_edge(2, 3)
95
+ >>> g.add_edge(3, 3)
96
+ >>> visited = [False] * len(g.vertex)
97
+ >>> g.dfs_recursive(0, visited)
98
+ 0 1 2 3
99
+ """
35
100
# mark start vertex as visited
36
101
visited [start_vertex ] = True
37
102
38
- print (start_vertex , end = " " )
103
+ print (start_vertex , end = "" )
39
104
40
105
# Recur for all the vertices that are adjacent to this node
41
106
for i in self .vertex :
42
107
if not visited [i ]:
108
+ print (" " , end = "" )
43
109
self .dfs_recursive (i , visited )
44
110
45
111
46
112
if __name__ == "__main__" :
113
+ import doctest
114
+
115
+ doctest .testmod ()
116
+
47
117
g = Graph ()
48
118
g .add_edge (0 , 1 )
49
119
g .add_edge (0 , 2 )
@@ -55,11 +125,3 @@ def dfs_recursive(self, start_vertex: int, visited: list) -> None:
55
125
g .print_graph ()
56
126
print ("DFS:" )
57
127
g .dfs ()
58
-
59
- # OUTPUT:
60
- # 0 -> 1 -> 2
61
- # 1 -> 2
62
- # 2 -> 0 -> 3
63
- # 3 -> 3
64
- # DFS:
65
- # 0 1 2 3
0 commit comments