From d654e7d574b0f0722132a89effd3d8b4237b3be8 Mon Sep 17 00:00:00 2001 From: Aman5989 <95266619+Aman5989@users.noreply.github.com> Date: Tue, 4 Oct 2022 15:31:17 +0530 Subject: [PATCH] Create BFS-ALGORITHM-USING-C++ Here's a solution to opened issue BFS algorithm using c++ Please add hacktoberfest tag. --- BFS-ALGORITHM-USING-C++ | 72 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 72 insertions(+) create mode 100644 BFS-ALGORITHM-USING-C++ diff --git a/BFS-ALGORITHM-USING-C++ b/BFS-ALGORITHM-USING-C++ new file mode 100644 index 00000000..25141e40 --- /dev/null +++ b/BFS-ALGORITHM-USING-C++ @@ -0,0 +1,72 @@ +// BFS algorithm in C++ + +#include +#include + +using namespace std; + +class Graph { + int numVertices; + list* adjLists; + bool* visited; + + public: + Graph(int vertices); + void addEdge(int src, int dest); + void BFS(int startVertex); +}; + +// Create a graph with given vertices, +// and maintain an adjacency list +Graph::Graph(int vertices) { + numVertices = vertices; + adjLists = new list[vertices]; +} + +// Add edges to the graph +void Graph::addEdge(int src, int dest) { + adjLists[src].push_back(dest); + adjLists[dest].push_back(src); +} + +// BFS algorithm +void Graph::BFS(int startVertex) { + visited = new bool[numVertices]; + for (int i = 0; i < numVertices; i++) + visited[i] = false; + + list queue; + + visited[startVertex] = true; + queue.push_back(startVertex); + + list::iterator i; + + while (!queue.empty()) { + int currVertex = queue.front(); + cout << "Visited " << currVertex << " "; + queue.pop_front(); + + for (i = adjLists[currVertex].begin(); i != adjLists[currVertex].end(); ++i) { + int adjVertex = *i; + if (!visited[adjVertex]) { + visited[adjVertex] = true; + queue.push_back(adjVertex); + } + } + } +} + +int main() { + 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); + + g.BFS(2); + + return 0; +}