fork download
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3.  
  4. typedef long long int ll;
  5. typedef vector<int> vi;
  6. typedef pair<int,int> ii;
  7. typedef vector<ii> vii;
  8. #define F(i,a,b) for(int i = (int)(a); i <= (int)(b); i++)
  9. #define RF(i,a,b) for(int i = (int)(a); i >= (int)(b); i--)
  10. #define MOD 1000000007
  11. #define DFS_WHITE -1
  12. #define DFS_BLACK 1
  13.  
  14. class Graph
  15. {
  16. private:
  17. int V;
  18. vector<vii> AdjList;
  19. void dfs_util(int v, int dfs_num[]);
  20. public:
  21. Graph(int V);
  22. void addEdge(int u, int v, int wt);
  23. void dfs();
  24. };
  25.  
  26. Graph::Graph(int V)
  27. {
  28. this->V = V;
  29. AdjList.assign(V, vii());
  30. }
  31.  
  32. void Graph::addEdge(int u, int v, int wt)
  33. {
  34. AdjList[u].push_back(ii(v,wt));
  35. }
  36.  
  37. void Graph::dfs_util(int u, int dfs_num[])
  38. {
  39. printf("Visiting %d\n",u);
  40. dfs_num[u] = DFS_BLACK;
  41. for(int j = 0; j < (int)AdjList[u].size(); j++)
  42. {
  43. ii v = AdjList[u][j];
  44. if(dfs_num[v.first] == DFS_WHITE)
  45. dfs_util(v.first, dfs_num);
  46. }
  47. }
  48. void Graph::dfs()
  49. {
  50. int dfs_num[V];
  51. F(i,0,V-1) dfs_num[i] = -1;
  52. F(i,0,V-1)
  53. {
  54. if(dfs_num[i] == DFS_WHITE)
  55. dfs_util(i,dfs_num);
  56. }
  57.  
  58. }
  59. int main()
  60. {
  61. int N,M,u,v;
  62. scanf("%d%d",&N,&M);
  63. Graph G(N);
  64. F(i,0,M-1)
  65. {
  66. scanf("%d%d",&u,&v);
  67. G.addEdge(u,v,0);
  68. }
  69. G.dfs();
  70. return 0;
  71. }
  72.  
  73.  
Success #stdin #stdout 0s 3464KB
stdin
3 3
0 1
1 0
1 2
stdout
Visiting  0
Visiting  1
Visiting  2