Course Schedule - Codeprg

Breaking

programing News Travel Computer Engineering Science Blogging Earning

Saturday 29 August 2020

Course Schedule



Course Schedule

 

Course Schedule

There are a total of numCourses courses you have to take, labeled from 0 to numCourses-1.

Some courses may have prerequisites, for example to take course 0 you have to first take course 1, which is expressed as a pair: [0,1]

Given the total number of courses and a list of prerequisite pairs, is it possible for you to finish all courses?

 

Example 1:

Input: numCourses = 2, prerequisites = [[1,0]]
Output: true
Explanation: There are a total of 2 courses to take. 
             To take course 1 you should have finished course 0. So it is possible.

Example 2:

Input: numCourses = 2, prerequisites = [[1,0],[0,1]]
Output: false
Explanation: There are a total of 2 courses to take. 
             To take course 1 you should have finished course 0, and to take course 0 you should
             also have finished course 1. So it is impossible.

 

Constraints:

  • The input prerequisites is a graph represented by a list of edges, not adjacency matrices. Read more about how a graph is represented.
  • You may assume that there are no duplicate edges in the input prerequisites.
  • 1 <= numCourses <= 10^5



class Solution {
public:
    bool detectCyc(vector<int> adj[],int i,vector<int> &vis)
    {
        if(vis[i]==1)return true;
        if(vis[i]==2)return false;
        vis[i]=1;
        for(int k=0;k<adj[i].size();++k)
        {
            if(detectCyc(adj,adj[i][k],vis))
                return true;
        }
        vis[i]=2;
        return false;
    }
    bool canFinish(int num, vector<vector<int>>& pre) {
        if(pre.size()<=1)return true;
        vector<int> adj[num];
        for(int i=0;i<pre.size();++i)
            adj[pre[i][1]].push_back(pre[i][0]);
        
        vector<int> vis(num,0);
        
        for(int i=0;i<num;++i)
        {
            if(!vis[i])
                if(detectCyc(adj,i,vis))
                    return false;
        }
        return true;
            
    }
};