From 51192870300b45076276dc285b94125a6d25175f Mon Sep 17 00:00:00 2001 From: Lewis Tian Date: Fri, 20 Nov 2020 15:09:54 +0800 Subject: [PATCH 1/2] update graphs/breadth_first_search.py - update naming style to snake_case - add type hints --- graphs/breadth_first_search.py | 38 ++++++++++++++++++---------------- 1 file changed, 20 insertions(+), 18 deletions(-) diff --git a/graphs/breadth_first_search.py b/graphs/breadth_first_search.py index e40ec9d1d06d..14ecfe0ee8d5 100644 --- a/graphs/breadth_first_search.py +++ b/graphs/breadth_first_search.py @@ -2,24 +2,26 @@ """ Author: OMKAR PATHAK """ +from typing import Set + class Graph: def __init__(self): self.vertices = {} - def printGraph(self): + def print_graph(self) -> None: """prints adjacency list representation of graaph""" - for i in self.vertices.keys(): + for i in self.vertices: print(i, " : ", " -> ".join([str(j) for j in self.vertices[i]])) - def addEdge(self, fromVertex, toVertex): + def add_edge(self, from_vertex: int, to_vertex: int) -> None: """adding the edge between two vertices""" - if fromVertex in self.vertices.keys(): - self.vertices[fromVertex].append(toVertex) + if from_vertex in self.vertices: + self.vertices[from_vertex].append(to_vertex) else: - self.vertices[fromVertex] = [toVertex] + self.vertices[from_vertex] = [to_vertex] - def BFS(self, startVertex): + def bfs(self, start_vertex: int) -> Set[int]: # initialize set for storing already visited vertices visited = set() @@ -27,8 +29,8 @@ def BFS(self, startVertex): queue = [] # mark the source node as visited and enqueue it - visited.add(startVertex) - queue.append(startVertex) + visited.add(start_vertex) + queue.append(start_vertex) while queue: vertex = queue.pop(0) @@ -43,17 +45,17 @@ def BFS(self, startVertex): if __name__ == "__main__": g = Graph() - g.addEdge(0, 1) - g.addEdge(0, 2) - g.addEdge(1, 2) - g.addEdge(2, 0) - g.addEdge(2, 3) - g.addEdge(3, 3) - - g.printGraph() + g.add_edge(0, 1) + g.add_edge(0, 2) + g.add_edge(1, 2) + g.add_edge(2, 0) + g.add_edge(2, 3) + g.add_edge(3, 3) + + g.print_graph() # 0 : 1 -> 2 # 1 : 2 # 2 : 0 -> 3 # 3 : 3 - assert sorted(g.BFS(2)) == [0, 1, 2, 3] + assert sorted(g.bfs(2)) == [0, 1, 2, 3] From 0b36986b9fd62f6617e376934b6bc45850bb7549 Mon Sep 17 00:00:00 2001 From: Lewis Tian Date: Fri, 20 Nov 2020 15:46:48 +0800 Subject: [PATCH 2/2] add doctests --- graphs/breadth_first_search.py | 36 +++++++++++++++++++++++++++++++--- 1 file changed, 33 insertions(+), 3 deletions(-) diff --git a/graphs/breadth_first_search.py b/graphs/breadth_first_search.py index 14ecfe0ee8d5..ee9855bd0c2d 100644 --- a/graphs/breadth_first_search.py +++ b/graphs/breadth_first_search.py @@ -6,22 +6,48 @@ class Graph: - def __init__(self): + def __init__(self) -> None: self.vertices = {} def print_graph(self) -> None: - """prints adjacency list representation of graaph""" + """ + prints adjacency list representation of graaph + >>> g = Graph() + >>> g.print_graph() + >>> g.add_edge(0, 1) + >>> g.print_graph() + 0 : 1 + """ for i in self.vertices: print(i, " : ", " -> ".join([str(j) for j in self.vertices[i]])) def add_edge(self, from_vertex: int, to_vertex: int) -> None: - """adding the edge between two vertices""" + """ + adding the edge between two vertices + >>> g = Graph() + >>> g.print_graph() + >>> g.add_edge(0, 1) + >>> g.print_graph() + 0 : 1 + """ if from_vertex in self.vertices: self.vertices[from_vertex].append(to_vertex) else: self.vertices[from_vertex] = [to_vertex] def bfs(self, start_vertex: int) -> Set[int]: + """ + >>> g = Graph() + >>> g.add_edge(0, 1) + >>> g.add_edge(0, 1) + >>> g.add_edge(0, 2) + >>> g.add_edge(1, 2) + >>> g.add_edge(2, 0) + >>> g.add_edge(2, 3) + >>> g.add_edge(3, 3) + >>> sorted(g.bfs(2)) + [0, 1, 2, 3] + """ # initialize set for storing already visited vertices visited = set() @@ -44,6 +70,10 @@ def bfs(self, start_vertex: int) -> Set[int]: if __name__ == "__main__": + from doctest import testmod + + testmod(verbose=True) + g = Graph() g.add_edge(0, 1) g.add_edge(0, 2)