Breadth-First Search (BFS)
Breadth-First Search (BFS) is a popular graph traversal algorithm that explores all the vertices of a graph in breadth-first order. It starts from a source vertex and visits all its neighboring vertices before moving on to their neighbors. BFS uses a queue data structure to keep track of the vertices to be visited.
BFS can be applied to various problems in robotics and computer vision. One common application is navigation in a maze. By using BFS, we can find the shortest path between two points in a maze by exploring its cells in breadth-first order. Let's take a look at an example:
1import queue
2
3# Application: Navigation in a maze
4
5# This class represents a cell in the maze
6class Cell:
7 def __init__(self, row, col):
8 self.row = row
9 self.col = col
10 self.wall = False
11 self.visited = False
12 self.path = False
13 self.previous = None
14
15# Maze dimensions
16num_rows = 5
17num_cols = 5
18
19# Create the maze
20maze = [[Cell(row, col) for col in range(num_cols)] for row in range(num_rows)]
21
22# Set some walls in the maze
23def set_walls():
24 maze[1][1].wall = True
25 maze[1][3].wall = True
26 maze[2][2].wall = True
27 maze[3][1].wall = True
28
29# Function to print the maze
30
31# Function to get the neighbors of a cell
32
33# Breadth-First Search algorithm
In this example, we define a Cell
class to represent each cell in the maze. Each cell has attributes such as its row and column position, whether it is a wall, whether it has been visited, whether it is part of the path, and a reference to its previous cell. We then create a maze with the specified dimensions and set some walls.
To implement BFS, we need a queue data structure to store the cells to be visited. We start from a source cell and enqueue it in the queue. While the queue is not empty, we dequeue a cell, mark it as visited, and enqueue its unvisited neighboring cells. We repeat this process until we reach the destination cell or the queue becomes empty. This guarantees that we visit all cells in the maze in breadth-first order.
Next, we will write functions to print the maze, get the neighbors of a cell, and implement the BFS algorithm.
xxxxxxxxxx
# Breadth-First Search algorithm
import queue
# Application: Navigation in a maze
# This class represents a cell in the maze
class Cell:
def __init__(self, row, col):
self.row = row
self.col = col
self.wall = False
self.visited = False
self.path = False
self.previous = None
# Maze dimensions
num_rows = 5
num_cols = 5
# Create the maze
maze = [[Cell(row, col) for col in range(num_cols)] for row in range(num_rows)]
# Set some walls in the maze
def set_walls():
maze[1][1].wall = True
maze[1][3].wall = True
maze[2][2].wall = True
maze[3][1].wall = True
# Function to print the maze