Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <vector>
- #include <stack>
- #include <algorithm>
- using namespace std;
- typedef unsigned int uint;
- class Graph
- {
- uint V;
- vector<uint> *adj;
- void DFS(uint n,vector<bool>&v,stack<uint>&s);
- public:
- Graph(uint V);
- void addEdge(uint x,uint y);
- void printTopSort();
- };
- Graph::Graph(uint V)
- {
- this->V=V;
- adj=new vector<uint>[V+1];
- }
- void Graph::addEdge(uint x,uint y)
- {
- adj[x].emplace_back(y);
- }
- void Graph::DFS(uint n,vector<bool>&v,stack<uint> &s)
- {
- v[n]=true;
- for(auto i=adj[n].begin();i!=adj[n].end();++i)
- {
- if (!v[*i])
- DFS(*i,v,s);
- }
- s.push(n);
- }
- void Graph::printTopSort()
- {
- stack<uint> print;
- vector<bool> v;
- v.assign(V + 1, false);
- for(uint i=1;i<=V;++i)
- sort(adj[i].begin(),adj[i].end(),greater<uint>());
- for(uint i=V;i>0;--i)
- {
- if (!v[i])
- DFS(i,v,print);
- }
- while (!print.empty())
- {
- cout<<print.top()<<' ';
- print.pop();
- }
- }
- int main()
- {
- uint n,m;
- cin>>n>>m;
- Graph G(n);
- for(uint x,y,i=0;i<m;++i)
- {
- cin>>x>>y;
- G.addEdge(x,y);
- }
- G.printTopSort();
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement