BFS(Breadth First Search) is a graph traversal technique where a node and its neighbors are visited first and then the neighbors of neighbors. In simple terms it traverses level wise from the source. First it traverses level 1 nodes (direct neighbors of source node) and then level 2 nodes (neighbors of neighbors of source node) and so on.

Now, suppose if we have to know at which level all the nodes are at (from source node). Then BFS can be used to determine the level of each node.

Examples:

Input : Output : Node Level 0 0 1 1 2 1 3 2 4 2 5 2 6 2 7 3 Explanation :

`// CPP Program to determine level of each node ` `// and print level ` `#include <iostream> ` `#include <queue> ` `#include <vector> ` `using` `namespace` `std; ` ` ` `// function to determine level of each node starting ` `// from x using BFS ` `void` `printLevels(vector<` `int` `> graph[], ` `int` `V, ` `int` `x) ` `{ ` ` ` `// array to store level of each node ` ` ` `int` `level[V]; ` ` ` `bool` `marked[V]; ` ` ` ` ` `// create a queue ` ` ` `queue<` `int` `> que; ` ` ` ` ` `// enqueue element x ` ` ` `que.push(x); ` ` ` ` ` `// initialize level of source node to 0 ` ` ` `level[x] = 0; ` ` ` ` ` `// marked it as visited ` ` ` `marked[x] = ` `true` `; ` ` ` ` ` `// do until queue is empty ` ` ` `while` `(!que.empty()) { ` ` ` ` ` `// get the first element of queue ` ` ` `x = que.front(); ` ` ` ` ` `// dequeue element ` ` ` `que.pop(); ` ` ` ` ` `// traverse neighbors of node x ` ` ` `for` `(` `int` `i = 0; i < graph[x].size(); i++) { ` ` ` `// b is neighbor of node x ` ` ` `int` `b = graph[x][i]; ` ` ` ` ` `// if b is not marked already ` ` ` `if` `(!marked[b]) { ` ` ` ` ` `// enqueue b in queue ` ` ` `que.push(b); ` ` ` ` ` `// level of b is level of x + 1 ` ` ` `level[b] = level[x] + 1; ` ` ` ` ` `// mark b ` ` ` `marked[b] = ` `true` `; ` ` ` `} ` ` ` `} ` ` ` `} ` ` ` ` ` `// display all nodes and their levels ` ` ` `cout << ` `"Nodes"` ` ` `<< ` `" "` ` ` `<< ` `"Level"` `<< endl; ` ` ` `for` `(` `int` `i = 0; i < V; i++) ` ` ` `cout << ` `" "` `<< i << ` `" --> "` `<< level[i] << endl; ` `} ` ` ` `// Dirver Code ` `int` `main() ` `{ ` ` ` `// adjacency graph for tree ` ` ` `int` `V = 8; ` ` ` `vector<` `int` `> graph[V]; ` ` ` ` ` `graph[0].push_back(1); ` ` ` `graph[0].push_back(2); ` ` ` `graph[1].push_back(3); ` ` ` `graph[1].push_back(4); ` ` ` `graph[1].push_back(5); ` ` ` `graph[2].push_back(5); ` ` ` `graph[2].push_back(6); ` ` ` `graph[6].push_back(7); ` ` ` ` ` `// call levels function with source as 0 ` ` ` `printLevels(graph, V, 0); ` ` ` ` ` `return` `0; ` `} ` |

*chevron_right*

*filter_none*

Output:

Nodes Level 0 --> 0 1 --> 1 2 --> 1 3 --> 2 4 --> 2 5 --> 2 6 --> 2 7 --> 3

## Recommended Posts:

- Minimum cost path from source node to destination node via an intermediate node
- Right sibling of each node in a tree given as array of edges
- Find all reachable nodes from every node present in a given set
- Number of loops of size k starting from a specific node
- k'th heaviest adjacent node in a graph where each vertex has weight
- Count single node isolated sub-graphs in a disconnected graph
- Count the number of nodes at given level in a tree using BFS.
- Print all paths from a given source to a destination using BFS
- Print all paths from a given source to a destination
- Number of Walks from source to destination
- Find if there is a path of more than k length from a source
- Count all possible walks from a source to a destination with exactly k edges
- Multi Source Shortest Path in Unweighted Graph
- Minimum edges to reverse to make path from a source to a destination
- Level Ancestor Problem

If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.