fork download
  1. #include<set>
  2. #include<map>
  3. #include<list>
  4. #include<iomanip>
  5. #include<cmath>
  6. #include<string>
  7. #include<vector>
  8. #include<queue>
  9. #include<stack>
  10. #include<complex>
  11. #include<sstream>
  12. #include<iostream>
  13. #include<fstream>
  14. #include<algorithm>
  15. #include<numeric>
  16. #include<utility>
  17. #include<functional>
  18. #include<stdio.h>
  19. #include<assert.h>
  20. #include<memory.h>
  21. #include<bitset>
  22. using namespace std;
  23. #define pb push_back
  24. #define MP make_pair
  25. int n, m, s, e;
  26. int vis[100];
  27. vector<vector<int> >adj;
  28. vector<int> topsort;
  29. void dfs(int node)
  30. {
  31. vis[node] = 1;
  32. for (int i = 0; i < adj[node].size(); i++)//visit all the son of node before printing it
  33. if (!vis[adj[node][i]])//visit not visited nodes
  34. dfs(adj[node][i]);
  35. topsort.push_back(node);//after visting all it's sons push it to be printed
  36. }
  37. int main()
  38. {
  39.  
  40.  
  41. while (cin >> n >> m && n && m)
  42. {
  43.  
  44. adj.resize(n + 1);
  45. for (int i = 0; i < m; i++)
  46. {//building graph
  47. cin >> s >> e;
  48. adj[e - 1].push_back(s - 1);//node start should happen before node end
  49. }
  50. for (int i = 0; i < n; i++)
  51. if (!vis[i])//dfs from every node
  52. dfs(i);
  53. for (int i = 0; i < topsort.size(); i++)
  54. {
  55. cout << topsort[i] + 1;
  56. if (i != topsort.size() - 2)
  57. cout << " ";
  58.  
  59. }
  60. cout << endl;
  61. }
  62. return 0;
  63.  
  64. }
Success #stdin #stdout 0s 3472KB
stdin
Standard input is empty
stdout
Standard output is empty