Advertisement
a53

SortTopMinLex

a53
Dec 21st, 2018
141
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.25 KB | None | 0 0
  1. #include <iostream>
  2. #include <vector>
  3. #include <stack>
  4. #include <algorithm>
  5. using namespace std;
  6. typedef unsigned int uint;
  7.  
  8. class Graph
  9. {
  10. uint V;
  11. vector<uint> *adj;
  12. void DFS(uint n,vector<bool>&v,stack<uint>&s);
  13. public:
  14. Graph(uint V);
  15. void addEdge(uint x,uint y);
  16. void printTopSort();
  17. };
  18.  
  19. Graph::Graph(uint V)
  20. {
  21. this->V=V;
  22. adj=new vector<uint>[V+1];
  23. }
  24.  
  25. void Graph::addEdge(uint x,uint y)
  26. {
  27. adj[x].emplace_back(y);
  28. }
  29.  
  30. void Graph::DFS(uint n,vector<bool>&v,stack<uint> &s)
  31. {
  32. v[n]=true;
  33.  
  34. for(auto i=adj[n].begin();i!=adj[n].end();++i)
  35. {
  36. if (!v[*i])
  37. DFS(*i,v,s);
  38. }
  39. s.push(n);
  40. }
  41.  
  42. void Graph::printTopSort()
  43. {
  44. stack<uint> print;
  45. vector<bool> v;
  46. v.assign(V + 1, false);
  47.  
  48. for(uint i=1;i<=V;++i)
  49. sort(adj[i].begin(),adj[i].end(),greater<uint>());
  50.  
  51. for(uint i=V;i>0;--i)
  52. {
  53. if (!v[i])
  54. DFS(i,v,print);
  55. }
  56.  
  57. while (!print.empty())
  58. {
  59. cout<<print.top()<<' ';
  60. print.pop();
  61. }
  62. }
  63.  
  64. int main()
  65. {
  66. uint n,m;
  67. cin>>n>>m;
  68.  
  69. Graph G(n);
  70. for(uint x,y,i=0;i<m;++i)
  71. {
  72. cin>>x>>y;
  73. G.addEdge(x,y);
  74. }
  75.  
  76. G.printTopSort();
  77. return 0;
  78. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement