From 3e2c18ed462232c47d3e434e03a4193ec80739d7 Mon Sep 17 00:00:00 2001 From: hkumar0132 <63600554+hkumar0132@users.noreply.github.com> Date: Mon, 21 Jun 2021 18:18:06 +0530 Subject: [PATCH] chore(CPlusPlus): added breadth first search (#362) --- .../CPlusPlus/Graphs/breadth-first-search.cpp | 103 ++++++++++++++++++ algorithms/CPlusPlus/README.md | 1 + 2 files changed, 104 insertions(+) create mode 100644 algorithms/CPlusPlus/Graphs/breadth-first-search.cpp diff --git a/algorithms/CPlusPlus/Graphs/breadth-first-search.cpp b/algorithms/CPlusPlus/Graphs/breadth-first-search.cpp new file mode 100644 index 00000000..5c1f5bad --- /dev/null +++ b/algorithms/CPlusPlus/Graphs/breadth-first-search.cpp @@ -0,0 +1,103 @@ +// Program to print BFS traversal from a given +// source vertex. BFS(int s) traverses vertices +// reachable from s. +#include +#include + +using namespace std; + +// This class represents a directed graph using +// adjacency list representation +class Graph +{ + int V; // No. of vertices + + // Pointer to an array containing adjacency + // lists + list *adj; +public: + Graph(int V); // Constructor + + // 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 = new list[V]; +} + +void Graph::addEdge(int v, int w) +{ + adj[v].push_back(w); // Add w to v’s list. +} + +void Graph::BFS(int s) +{ + // Mark all the vertices as not visited + bool *visited = new bool[V]; + for(int i = 0; i < V; i++) + visited[i] = false; + + // Create a queue for BFS + list queue; + + // Mark the current node as visited and enqueue it + visited[s] = true; + queue.push_back(s); + + // 'i' will be used to get all adjacent + // vertices of a vertex + list::iterator i; + + 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 a adjacent has not been visited, + // then mark it visited and enqueue it + for (i = adj[s].begin(); i != adj[s].end(); ++i) + { + if (!visited[*i]) + { + visited[*i] = true; + queue.push_back(*i); + } + } + } +} + +// Driver program to test methods of graph class +int main() +{ + // Create a graph given in the above diagram + + int edges; + cout << "Enter number of edges: "; + cin >> edges; + Graph g(edges); + + for(int i = 0; i < edges; i++) { + int u, v; + cout << "Enter an edge: "; + cin >> u >> v; + g.addEdge(u, v); + } + + cout << "Following is Breadth First Traversal " + << "(starting from vertex 0) \n"; + g.BFS(0); + + return 0; +} + +//Time complexity: O(n), where n is the number of vertices in graph +//Space complexity: O(n), where n is the number of vertices in graph \ No newline at end of file diff --git a/algorithms/CPlusPlus/README.md b/algorithms/CPlusPlus/README.md index 17fd91f8..64d91640 100644 --- a/algorithms/CPlusPlus/README.md +++ b/algorithms/CPlusPlus/README.md @@ -14,6 +14,7 @@ ## Graphs 1. [Bellman Ford Algorithm](Graphs/bellmam-ford.cpp) 2. [kruskal Algorithm](Graphs/kruskal-algorithm.cpp) +3. [Breadth First Search](Graphs/breadth-first-search.cpp) ## Multiplication 1. [Karatsuba](Multiplication/karatsuba.cpp)