diff --git a/graphs/breadth_first_search.py b/graphs/breadth_first_search.py index 7c626429e..9264f57b4 100644 --- a/graphs/breadth_first_search.py +++ b/graphs/breadth_first_search.py @@ -3,6 +3,8 @@ """ Author: OMKAR PATHAK """ from __future__ import annotations +from queue import Queue + class Graph: def __init__(self) -> None: @@ -51,19 +53,19 @@ class Graph: visited = set() # create a first in first out queue to store all the vertices for BFS - queue = [] + queue = Queue() # mark the source node as visited and enqueue it visited.add(start_vertex) - queue.append(start_vertex) + queue.put(start_vertex) - while queue: - vertex = queue.pop(0) + while not queue.empty(): + vertex = queue.get() # loop through all adjacent vertex and enqueue it if not yet visited for adjacent_vertex in self.vertices[vertex]: if adjacent_vertex not in visited: - queue.append(adjacent_vertex) + queue.put(adjacent_vertex) visited.add(adjacent_vertex) return visited diff --git a/graphs/breadth_first_search_2.py b/graphs/breadth_first_search_2.py index a90e963a4..4c8b69faf 100644 --- a/graphs/breadth_first_search_2.py +++ b/graphs/breadth_first_search_2.py @@ -14,6 +14,8 @@ while Q is non-empty: """ from __future__ import annotations +from queue import Queue + G = { "A": ["B", "C"], "B": ["A", "D", "E"], @@ -30,13 +32,14 @@ def breadth_first_search(graph: dict, start: str) -> set[str]: 'ABCDEF' """ explored = {start} - queue = [start] - while queue: - v = queue.pop(0) # queue.popleft() + queue = Queue() + queue.put(start) + while not queue.empty(): + v = queue.get() for w in graph[v]: if w not in explored: explored.add(w) - queue.append(w) + queue.put(w) return explored diff --git a/graphs/check_bipartite_graph_bfs.py b/graphs/check_bipartite_graph_bfs.py index 00b771649..b5203b4c5 100644 --- a/graphs/check_bipartite_graph_bfs.py +++ b/graphs/check_bipartite_graph_bfs.py @@ -6,14 +6,17 @@ # from V to U. In other words, for every edge (u, v), either u belongs to U and v to V, # or u belongs to V and v to U. We can also say that there is no edge that connects # vertices of same set. +from queue import Queue + + def checkBipartite(graph): - queue = [] + queue = Queue() visited = [False] * len(graph) color = [-1] * len(graph) def bfs(): - while queue: - u = queue.pop(0) + while not queue.empty(): + u = queue.get() visited[u] = True for neighbour in graph[u]: @@ -23,7 +26,7 @@ def checkBipartite(graph): if color[neighbour] == -1: color[neighbour] = 1 - color[u] - queue.append(neighbour) + queue.put(neighbour) elif color[neighbour] == color[u]: return False @@ -32,7 +35,7 @@ def checkBipartite(graph): for i in range(len(graph)): if not visited[i]: - queue.append(i) + queue.put(i) color[i] = 0 if bfs() is False: return False