Alex_tz307

TopSortDFS

Sep 11th, 2020
127
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 0.72 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. #define maxn 100005
  3.  
  4. using namespace std;
  5.  
  6. int n, m, x, y;
  7. vector < int > G[maxn];
  8. list < int > L;
  9. bool viz[maxn];
  10.  
  11. void read () {
  12.     cin >> n >> m;
  13.     while (m --) {
  14.         cin >> x >> y;
  15.         G[x].emplace_back (y);
  16.     }
  17. }
  18.  
  19. void dfs (int k) {
  20.     viz[k] = true;
  21.     for (vector < int > :: iterator it = G[k].begin(); it != G[k].end(); ++it)
  22.     if (!viz[*it]) dfs (*it);
  23.     L.push_front (k);
  24. }
  25.  
  26. void solve () {
  27.     for (int i = 1; i <= n; ++i) if (!viz[i]) dfs (i);
  28. }
  29.  
  30. void print () {
  31.     for (list < int > :: iterator it = L.begin(); it != L.end(); ++it) cout << *it << " ";
  32.     cout << '\n';
  33. }
  34.  
  35. int main(){
  36.     read();
  37.     solve();
  38.     print();
  39.     return 0;
  40. }
Add Comment
Please, Sign In to add comment