fork download
  1. #include <iostream>
  2. #include<vector>
  3. #include<queue>
  4. #include<omp.h>
  5.  
  6. using namespace std;
  7. class Graph {
  8. int V;
  9. vector<vector<int>> adj;
  10.  
  11. public:
  12. Graph(int V) : V(V), adj (V) {}
  13. void addEdge(int v, int w) {
  14. adj[v].push_back(w);
  15. }
  16.  
  17. void parallelDFS(int startVertex) {
  18. vector<bool> visited(V, false);
  19. parallelDFSUtil(startVertex, visited );
  20.  
  21. }
  22. void parallelDFSUtil (int v, vector<bool>& visited) {
  23. visited[V] = true;
  24. cout<< v << "";
  25.  
  26. for (int i = 0; i<adj[v].size(); ++i) {
  27. int n = adj[v][i];
  28. if (!visited[n])
  29. parallelDFSUtil(n, visited);
  30. }
  31. }
  32.  
  33. void parallelBFS(int startVertex) {
  34. vector<bool> visited(V, false);
  35. queue<int> q;
  36. visited[startVertex] = true;
  37. q.push(startVertex);
  38.  
  39. while (!q.empty()) {
  40. int v = q.front();
  41. q.pop();
  42. cout<< v << " ";
  43.  
  44. for (int i = 0; i < adj[v].size(); ++i) {
  45. int n = adj[v][i];
  46. if (!visited[n]) {
  47. visited[n] = true;
  48. q.push(n);
  49. }
  50. }
  51. }
  52. }
  53. };
  54. int main() {
  55. Graph g(7);
  56. g.addEdge(0,1);
  57. g.addEdge(0,2);
  58. g.addEdge(1,3);
  59. g.addEdge(1,4);
  60. g.addEdge(2,5);
  61. g.addEdge(2,6);
  62.  
  63. cout<< "depth first search (dfs): ";
  64. g.parallelDFS(0);
  65. cout<< endl;
  66.  
  67. cout<< "Breadth First Search (BFS): ";
  68. g.parallelBFS(0);
  69. cout<< endl;
  70.  
  71. return 0;
  72.  
  73. }
Success #stdin #stdout 0.01s 5280KB
stdin
Standard input is empty
stdout
depth first search (dfs): 0134256
Breadth First Search (BFS): 0 1 2 3 4 5 6