fork download
  1. #include <iostream>
  2. #include <list>
  3. using namespace std;
  4. class Graph {
  5. private:
  6. int v;
  7. list<int> *adj;
  8. public:
  9. Graph(int v) {
  10. this->v = v;
  11. adj =new list<int>[v];
  12. }
  13. void addEdge(int source, int dest) {
  14. adj[source].push_back(dest);
  15. }
  16.  
  17. void printGraph() {
  18. for(int i=0;i<v;i++) {
  19. list<int> l = adj[i];
  20. list <int> :: iterator it;
  21. for(it = l.begin(); it != l.end(); ++it)
  22. cout << '\t' << *it;
  23. cout << '\n';
  24. }
  25. }
  26. void bfs(int s) {
  27. bool *visited = new bool[v];
  28. for(int i=0;i<v;i++)
  29. visited[i] = false;
  30. list<int> queue;
  31. visited[s] = true;
  32. queue.push_back(s);
  33. list<int>::iterator i;
  34. while(!queue.empty()) {
  35. s = queue.front();
  36. cout<<s<< " ";
  37. queue.pop_front();
  38. for(i = adj[s].begin();i!=adj[s].end();++i) {
  39. if(!visited[*i]) {
  40. visited[*i] = true;
  41. queue.push_back(*i);
  42. }
  43. }
  44. }
  45. }
  46. };
  47. int main() {
  48. Graph g(4);
  49. g.addEdge(0, 1);
  50. g.addEdge(0, 2);
  51. g.addEdge(1, 2);
  52. g.addEdge(2, 0);
  53. g.addEdge(2, 3);
  54. g.addEdge(3, 3);
  55. //g.printGraph();
  56. g.bfs(2);
  57. return 0;
  58. }
Success #stdin #stdout 0s 4392KB
stdin
Standard input is empty
stdout
2 0 3 1