## Breadth First Search

**Breadth First Search** (BFS) searches breadth-wise in the problem space. Breadth-First search is like traversing a tree where each node is a state which may a be a potential candidate for solution. 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.

### Algorithm: Breadth-First Search

- Create a variable called NODE-LIST and set it to the initial state.
- Loop until the goal state is found or NODE-LIST is empty.
- Remove the first element, say E, from the NODE-LIST. If NODE-LIST was empty then quit.
- For each way that each rule can match the state described in E do:

i) Apply the rule to generate a new state.

ii) If the new state is the goal state, quit and return this state.

iii) Otherwise add this state to the end of NODE-LIST

Since it never generates a node in the tree until all the nodes at shallower levels have been generated, *breadth-first search* always finds a shortest path to a goal. Since each node can be generated in constant time, the amount of time used by Breadth first search is proportional to the number of nodes generated, which is a function of the branching factor b and the solution d. Since the number of nodes at level d is b^{d}, the total number of nodes generated in the worst case is b + b^{2} + b^{3} +… + b^{d} i.e. O(b^{d}) , the asymptotic time complexity of breadth first search.

Look at the above tree with nodes starting from root node, R at the first level, A and B at the second level and C, D, E and F at the third level. If we want to search for node E then BFS will search level by level. First it will check if E exists at the root. Then it will check nodes at the second level. Finally it will find E a the third level.

#### Advantages of Breadth-First Search

- Breadth first search will never get trapped exploring the useless path forever.
- If there is a solution, BFS will definitely find it out.
- If there is more than one solution then BFS can find the minimal one that requires less number of steps.

#### Disadvantages of Breadth-First Search

- 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(b
^{d}). As a result, BFS is severely space-bound in practice so will exhaust the memory available on typical computers in a matter of minutes. - If the solution is farther away from the root, breath first search will consume lot of time.