Research
Research
Experiment No.2
Implement packet routing in a computer network using DFS
and BFS.
Date of Performance: 27/01/2025
Date of Submission: 27/01/2025
Aim: Study and Implementation of Depth first search for problem solving.
Objective: To study the uninformed searching techniques and its implementation for problem
solving.
Theory:
Artificial Intelligence is the study of building agents that act rationally. Most of the time,
these agents perform some kind of search algorithm in the background in order to achieve
their tasks.
• A search problem consists of:
• A State Space. Set of all possible states where you can be.
• A Start State. The state from where the search begins.
• A Goal Test. A function that looks at the current state returns whether or not
it is the goal state.
• The Solution to a search problem is a sequence of actions, called the plan that
transforms the start state to the goal state.
• This plan is achieved through search algorithms.
Depth First Search: DFS is an uninformed search method. It is also called blind search.
Uninformed search strategies use only the information available in the problem definition. A
search strategy is defined by picking the order of node expansion. Depth First Search (DFS)
searches deeper into the problem space. It is a recursive algorithm that uses the idea of
backtracking. It involves exhaustive searches of all the nodes by going ahead, if possible, else
by backtracking.
1. Pick a starting node and push all its adjacent nodes into a stack.
2. Pop a node from stack to select the next node to visit and push all its adjacent nodes
into a stack.
3. Repeat this process until the stack is empty.
However, ensure that the nodes that are visited are marked. This will prevent you from visiting
the same node more than once. If you do not mark the nodes that are visited and you visit the
same node more than once, you may end up in an infinite loop.
Algorithm:
A standard DFS implementation puts each vertex of the graph into one of two categories:
1. Visited
2. Not Visited
The purpose of the algorithm is to mark each vertex as visited while avoiding cycles.
Pseudocode:
Path: 1 → 2→ 4→ 5→ 3
1. There is a possibility that it may go down the left-most path forever. Even a finite graph
can generate an infinite tree.
2. Depth-First Search is not guaranteed to find the solution.
3. No guarantee to find a optimum solution, if more than one solution exists.
Applications:
A graph is said to be disconnected if it is not connected, i.e. if two nodes exist in the graph
such that there is no edge in between those nodes. In an undirected graph, a connected
component is a set of vertices in a graph that are linked to each other by paths.
Consider the example given in the diagram. Graph G is a disconnected graph and has the
following 3 connected components.
Breadth First Search: BFS is a uninformed search method. It is also called blind search.
Uninformed search strategies use only the information available in the problem definition. A
search strategy is defined by picking the order of node expansion. It expands nodes from the
root of the tree and then generates one level of the tree at a time until a solution is found. It is
very easily implemented by maintaining a queue of nodes. Initially the queue contains just the
root. In each iteration, node at the head of the queue is removed and then expanded. The
generated child nodes are then added to the tail of the queue.
BFS is a traversing algorithm where you should start traversing from a selected node (source
or starting node) and traverse the graph layerwise thus exploring the neighbour nodes (nodes
which are directly connected to source node). You must then move towards the next-level
neighbour nodes.
As the name BFS suggests, you are required to traverse the graph breadthwise as follows:
1. First move horizontally and visit all the nodes of the current layer
2. Move to the next layer
BFS Algorithm:
Pseudocode:
mark s as visited.
while ( Q is not empty)
//Removing that vertex from queue,whose neighbour will be visited now
v = Q.dequeue( )
Working of BFS:
1. Breadth first search will never get trapped exploring the useless path forever.
2. If there is a solution, BFS will definitely find it out.
3. If there is more than one solution then BFS can find the minimal one that requires less
number of steps.
1. The main drawback of Breadth first search is its memory requirement. Since each level
of the tree must be saved in order to generate the next level, and the amount of memory
is proportional to the number of nodes stored, the space complexity of BFS is O(bd).
2. If the solution is farther away from the root, breath first search will consume lot of time.
Applications:
As you know in BFS, you traverse level wise. You can also use BFS to determine the level of
each node.
Code:
import java.util.*;
while (!queue.isEmpty()) {
int curr = queue.poll();
System.out.print(curr + " ");
System.out.println("BFS Traversal:");
for (int i = 0; i < v; i++) {
if (!vis[i]) {
bfs(graph, i, vis);
}
}
System.out.println("\nDFS Traversal:");
for (int i = 0; i < v; i++) {
if (!vis[i]) {
dfs(graph, i, vis);
}
}
}
}
Output: