fork download
  1. #include<iostream>
  2. #include<vector>
  3. #include<cstring>
  4. #include<stack>
  5. #include<cstdio>
  6.  
  7. #define max 1000
  8. #define INF 100000000
  9. using namespace std;
  10.  
  11. vector<int> adj[max];
  12. int s[max],f[max],nodes[max];
  13. int time_count,n,e;
  14. char visited[max];
  15. stack<int> st;
  16. int tim,m=0;
  17.  
  18. void createAdjecenyList(int u,int v){
  19. adj[u].push_back(v);
  20. adj[v].push_back(u);
  21. }
  22.  
  23. void print_st(stack<int> ps){
  24. while(!ps.empty()){
  25. printf("%d ",ps.top());
  26. ps.pop();
  27. }
  28. printf("\n");
  29. }
  30.  
  31. void printnodes(){
  32. int i;
  33. for(i=1;i<=n;i++)
  34. printf("node: %d st_time: %d end_time: %d\n",i,s[i],f[i]);
  35. }
  36.  
  37. void dfs(int v){
  38. // int u,i,count;
  39. tim = 0;
  40. st.push(v);
  41. s[v] = tim++;
  42. visited[v]=1;
  43. while(!st.empty()) {
  44. printf("Printing stack: "); print_st(st);
  45. int u = st.top(); st.pop();
  46. f[u] = tim++;
  47. // nodes[m++]=u;
  48. for( int i=0; i<adj[u].size(); i++)
  49. if( !visited[adj[u][i]] ) {
  50. st.push(adj[u][i]);
  51. s[adj[u][i]] = tim++;
  52. visited[adj[u][i]] = 1;
  53. }
  54. }
  55. }
  56. int main(){
  57. int u,v,i;
  58. memset(visited,0,sizeof(visited)); // 0 is for new node and 1 is for visited node
  59. scanf("%d",&n); // number of nodes
  60. scanf("%d",&e); // number of edges
  61. while(e--) {
  62. scanf("%d %d",&u,&v);
  63. createAdjecenyList(u,v);
  64. }
  65. dfs(1);
  66. printnodes();
  67. cout<<endl;
  68. return 0;
  69. }
Success #stdin #stdout 0s 3504KB
stdin
6
8
1 2
2 3
1 3
1 4
2 4
2 5
3 5
3 6
stdout
Printing stack: 1  
Printing stack: 4  3  2  
Printing stack: 3  2  
Printing stack: 6  5  2  
Printing stack: 5  2  
Printing stack: 2  
node: 1   st_time: 0   end_time: 1
node: 2   st_time: 2   end_time: 11
node: 3   st_time: 3   end_time: 6
node: 4   st_time: 4   end_time: 5
node: 5   st_time: 7   end_time: 10
node: 6   st_time: 8   end_time: 9