knakul853

Untitled

Jun 7th, 2020
115
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.39 KB | None | 0 0
  1. class Solution {
  2. public:
  3.     vector<int> findOrder(int numCourses, vector<vector<int>>& prerequisites) {
  4.        
  5.         int n = (int)prerequisites.size();
  6.        
  7.         vector<vector<int>>g(numCourses);
  8.         vector<int>visit(numCourses,0);
  9.        
  10.         for ( auto it: prerequisites )
  11.         {
  12.             g[ it[1] ].push_back( it[ 0 ] );
  13.         }
  14.        
  15.         vector<int>order;
  16.        
  17.         for(int i=0;i<numCourses;i++)
  18.         {
  19.             if(!visit[i])
  20.             {
  21.               auto it = dfs(i, g, visit, order);
  22.                 if(it) return {};
  23.                
  24.                
  25.             }
  26.         }
  27.        
  28.        reverse(order.begin(), order.end());
  29.         if(order.size() != numCourses) return {};
  30.        return order;
  31.          
  32.     }
  33.    
  34.     bool dfs( int node, vector<vector<int>>&g, vector<int>&visit, vector<int>&order )
  35.     {
  36.        
  37.         visit[ node ] = 1;
  38.        
  39.         bool has_cycle = false;
  40.        
  41.         for( int child : g[node] )
  42.         {
  43.             if( visit[child] == 0)
  44.             {
  45.                 has_cycle |= dfs(child, g, visit, order );
  46.             }
  47.            
  48.             else if( visit[ child ] == 1 )
  49.             {
  50.                 has_cycle = true;
  51.             }
  52.         }
  53.        
  54.         order.push_back(node);  
  55.         visit[ node ]=2;
  56.         return has_cycle;
  57.     }
  58.    
  59.    
  60. };
Add Comment
Please, Sign In to add comment