Depth-First Search (DFS) : The Comprehensive Guide With Python Code
Introduction to Depth-First Search (DFS)
Depth-First Search (DFS) is an algorithm used to traverse a graph or tree data structure. It is a type of search algorithm that starts at the root node and explores as far as possible along each branch before backtracking. DFS is often used to find a path between two nodes in a graph or to find all the connected components in a graph.
How Does DFS Work?
DFS works by starting at the root node and exploring as far as possible along each branch before backtracking. It uses a stack to keep track of the nodes to be explored. The algorithm begins by pushing the root node onto the stack and then exploring each of its adjacent nodes. If a node has not been visited, it is marked as visited and pushed onto the stack. This process is repeated until all the nodes have been visited.
Once all the nodes have been visited, the algorithm backtracks to the most recently visited node and continues exploring its adjacent nodes. This process is repeated until all the nodes have been explored.
# DFS Algorithm
# Create a graph class
class Graph:
# Constructor
def __init__(self):
self.graph = {}
# Add a vertex to the graph
def addVertex(self, vertex):
if vertex not in self.graph:
self.graph[vertex] = []
# Add an edge to the graph
def addEdge(self, fromVertex, toVertex):
if fromVertex in self.graph:
self.graph[fromVertex].append(toVertex)
# DFS Algorithm
def dfs(self, startVertex):
# Create a visited list
visited = []
# Create a stack
stack = [startVertex]
# While the stack is not empty
while stack:
# Pop the top element
vertex = stack.pop()
# If the vertex is not visited
if vertex not in visited:
# Mark it as visited
visited.append(vertex)
# Push all its neighbours onto the stack
stack.extend(self.graph[vertex])
# Return the visited list
return visited
# Create a graph
g = Graph()
# Add vertices
g.addVertex(1)
g.addVertex(2)
g.addVertex(3)
g.addVertex(4)
# Add edges
g.addEdge(1, 2)
g.addEdge(1, 3)
g.addEdge(2, 4)
g.addEdge(3, 4)
# Perform DFS
print(g.dfs(1)) # [1, 3, 4, 2]
This code implements a Depth-First Search (DFS) algorithm on a graph. The graph is represented as an adjacency list, stored in the graph dictionary. The addVertex and addEdge methods are used to add vertices and edges to the graph. The dfs method is used to perform the DFS algorithm, starting from the given start vertex. It uses a stack to keep track of the vertices to be visited, and a visited list to keep track of the vertices that have already been visited. The algorithm pops the top element from the stack, marks it as visited, and pushes all its neighbours onto the stack. This is repeated until the stack is empty, at which point the visited list is returned."
Advantages of DFS
DFS has several advantages over other search algorithms. It is relatively simple to implement and requires only a small amount of memory. Additionally, it can be used to find a path between two nodes in a graph or to find all the connected components in a graph.
Disadvantages of DFS
DFS can be inefficient if the graph is very large. Additionally, it may not find the shortest path between two nodes in a graph.
Conclusion
Depth-First Search (DFS) is a type of search algorithm used to traverse a graph or tree data structure. It is relatively simple to implement and requires only a small amount of memory. However, it can be inefficient if the graph is very large and may not find the shortest path between two nodes in a graph.