Breadth First Search in Python (with Code) | BFS Algorithm | FavTutor
Learning

Breadth First Search in Python (with Code) | BFS Algorithm | FavTutor

2100 Γ— 1500 px July 11, 2025 Ashley Learning
Download

Graph traversal algorithms are fundamental in computer science, enabling the exploration and manipulation of graph structures. Among these algorithms, Breadth First Search (BFS) stands out as a versatile and efficient method for traversing or searching tree or graph data structures. BFS explores nodes level by level, ensuring that all nodes at the present depth level are visited before moving on to nodes at the next depth level. This approach is particularly useful for finding the shortest path in unweighted graphs and for solving various problems in computer science and engineering.

Breadth First Search is a classic algorithm that operates by exploring all the neighbor nodes at the present depth prior to moving on to nodes at the next depth level. This level-order traversal ensures that the algorithm visits nodes in a systematic manner, making it ideal for applications where the shortest path is required.

Here are some key characteristics of BFS:

  • Level-Order Traversal: BFS visits nodes level by level, starting from the root node.
  • Shortest Path: In unweighted graphs, BFS guarantees the shortest path from the source node to any other node.
  • Queue Data Structure: BFS uses a queue to keep track of nodes to be explored, ensuring that nodes are processed in the order they are discovered.

Breadth First Search Python Implementation

Implementing BFS in Python is straightforward, thanks to the language's robust data structures and libraries. Below is a step-by-step guide to implementing BFS in Python.

Step 1: Define the Graph

First, we need to define the graph. A graph can be represented using an adjacency list, where each node points to a list of its neighboring nodes.

Here is an example of how to define a graph using an adjacency list:

graph = {
    'A': ['B', 'C'],
    'B': ['A', 'D', 'E'],
    'C': ['A', 'F'],
    'D': ['B'],
    'E': ['B', 'F'],
    'F': ['C', 'E']
}

Step 2: Implement the BFS Function

Next, we implement the BFS function. This function will take the graph and the starting node as inputs and return the order in which nodes are visited.

Here is the Python code for the BFS function:

from collections import deque

def bfs(graph, start):
    visited = set()  # Set to keep track of visited nodes
    queue = deque([start])  # Initialize the queue with the start node
    visited.add(start)  # Mark the start node as visited

    while queue:
        vertex = queue.popleft()  # Dequeue a vertex from the queue
        print(vertex)  # Process the vertex (e.g., print it)

        for neighbor in graph[vertex]:
            if neighbor not in visited:
                visited.add(neighbor)  # Mark the neighbor as visited
                queue.append(neighbor)  # Enqueue the neighbor

    return visited

# Example usage
graph = {
    'A': ['B', 'C'],
    'B': ['A', 'D', 'E'],
    'C': ['A', 'F'],
    'D': ['B'],
    'E': ['B', 'F'],
    'F': ['C', 'E']
}

bfs(graph, 'A')

In this implementation, we use a queue to keep track of nodes to be explored. The queue is initialized with the starting node, and nodes are dequeued one by one. For each dequeued node, its neighbors are checked. If a neighbor has not been visited, it is marked as visited and enqueued.

πŸ’‘ Note: The use of a deque (double-ended queue) from the collections module ensures efficient enqueue and dequeue operations, making the BFS implementation more performant.

BFS has a wide range of applications in various fields. Some of the most common applications include:

  • Shortest Path Finding: In unweighted graphs, BFS can be used to find the shortest path between two nodes.
  • Connected Components: BFS can be used to determine the connected components of a graph.
  • Cycle Detection: BFS can help detect cycles in a graph, which is useful in various algorithms and data structures.
  • Level Order Traversal: BFS is used to perform level order traversal of trees, which is essential in many tree-based algorithms.

Another popular graph traversal algorithm is Depth First Search (DFS). While both BFS and DFS are used to traverse graphs, they have distinct characteristics and use cases.

Characteristic Breadth First Search Depth First Search
Traversal Order Level by level Depth first
Data Structure Queue Stack
Shortest Path Guaranteed in unweighted graphs Not guaranteed
Memory Usage Higher for large graphs Lower for large graphs

BFS is generally preferred when the shortest path is required, while DFS is useful for applications where memory usage is a concern or when exploring all possible paths is necessary.

While the basic BFS algorithm is efficient, there are several optimizations that can be applied to improve its performance, especially for large graphs.

  • Early Termination: If the target node is found during the traversal, the algorithm can terminate early, saving time and resources.
  • Parallel Processing: For large graphs, parallel processing can be used to explore multiple nodes simultaneously, reducing the overall traversal time.
  • Graph Pruning: Removing irrelevant nodes and edges from the graph can reduce the search space and improve performance.

These optimizations can significantly enhance the efficiency of BFS, making it suitable for a broader range of applications.

πŸ’‘ Note: Optimizations should be applied based on the specific requirements and constraints of the application. Not all optimizations may be necessary or beneficial in every scenario.

Conclusion

Breadth First Search is a powerful and versatile algorithm for traversing and searching graph structures. Its level-order traversal ensures that nodes are visited in a systematic manner, making it ideal for finding the shortest path in unweighted graphs. Implementing BFS in Python is straightforward, thanks to the language’s robust data structures and libraries. By understanding the characteristics and applications of BFS, developers can leverage this algorithm to solve a wide range of problems in computer science and engineering. Whether used for shortest path finding, connected component detection, or cycle detection, BFS remains a fundamental tool in the arsenal of any computer scientist.

Related Terms:

  • breadth first search using python
  • depth first search python
  • implement breadth first search
  • breadth first search algorithm python
  • breadth first search examples
  • breadth first search diagram