Advertisement
Norvager

DFS

Nov 8th, 2018
197
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 0.93 KB | None | 0 0
  1. #define _CRT_SECURE_NO_WARNINGS
  2. #include <cstdio>
  3. #include <iostream>
  4. #include <cmath>
  5. #include <vector>
  6. #include <stack>
  7. #include <algorithm>
  8. using namespace std;
  9. vector<vector <int>> way;
  10. stack<int> st;
  11. vector<bool> used;
  12. vector<int> ans;
  13. void dfs(int pos)
  14. {
  15.     ans.push_back(pos);
  16.     st.pop();
  17.     for (int i = 0; i < way[pos].size(); i++)
  18.         if (used[way[pos][i]]) {
  19.             used[way[pos][i]] = false;
  20.             st.push(way[pos][i]);
  21.         }
  22.     if (!st.empty())
  23.         dfs(st.top());
  24.     return;
  25. }
  26.  
  27. int main()
  28. {
  29.     int n;
  30.     scanf("%d", &n);
  31.     way.resize(n + 1);
  32.     used.resize(n + 1, true);
  33.     used[1] = false;
  34.     st.push(1);
  35.     int k = 2;
  36.     for (int i = 0; i < n - 1; i++)
  37.     {
  38.         int a;
  39.         scanf("%d", &a);
  40.         way[a].push_back(k);
  41.         k++;
  42.     }
  43.     dfs(1);
  44.  
  45.     for (int i = 0; i < ans.size(); i++)
  46.         printf("%d ", ans[i]);
  47.  
  48.     return 0;
  49. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement