From a44888605fb1ba9b3f217cb7dd213d6b83f56c38 Mon Sep 17 00:00:00 2001 From: pmmaster12 <120505111+pmmaster12@users.noreply.github.com> Date: Sun, 15 Oct 2023 23:29:19 +0530 Subject: [PATCH] Create bfs_traversal.cpp --- bfs_traversal.cpp | 90 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 90 insertions(+) create mode 100644 bfs_traversal.cpp diff --git a/bfs_traversal.cpp b/bfs_traversal.cpp new file mode 100644 index 00000000..b08f5187 --- /dev/null +++ b/bfs_traversal.cpp @@ -0,0 +1,90 @@ +// C++ code to print BFS traversal from a given +// source vertex + +#include +using namespace std; + +// This class represents a directed graph using +// adjacency list representation +class Graph { + + // No. of vertices + int V; + + // Pointer to an array containing adjacency lists + vector > adj; + +public: + // Constructor + Graph(int V); + + // Function to add an edge to graph + void addEdge(int v, int w); + + // Prints BFS traversal from a given source s + void BFS(int s); +}; + +Graph::Graph(int V) +{ + this->V = V; + adj.resize(V); +} + +void Graph::addEdge(int v, int w) +{ + // Add w to v’s list. + adj[v].push_back(w); +} + +void Graph::BFS(int s) +{ + // Mark all the vertices as not visited + vector visited; + visited.resize(V, false); + + // Create a queue for BFS + list queue; + + // Mark the current node as visited and enqueue it + visited[s] = true; + queue.push_back(s); + + while (!queue.empty()) { + + // Dequeue a vertex from queue and print it + s = queue.front(); + cout << s << " "; + queue.pop_front(); + + // Get all adjacent vertices of the dequeued + // vertex s. + // If an adjacent has not been visited, + // then mark it visited and enqueue it + for (auto adjacent : adj[s]) { + if (!visited[adjacent]) { + visited[adjacent] = true; + queue.push_back(adjacent); + } + } + } +} + +// Driver code +int main() +{ + // Create a graph given in the above diagram + Graph g(4); + g.addEdge(0, 1); + g.addEdge(0, 2); + g.addEdge(1, 2); + g.addEdge(2, 0); + g.addEdge(2, 3); + g.addEdge(3, 3); + + cout << "Following is Breadth First Traversal " + << "(starting from vertex 2) \n"; + g.BFS(2); + + return 0; +}