207 Course Schedule

来源:互联网 发布:淘宝发布宝贝产品规格 编辑:程序博客网 时间:2024/06/05 19:54
//WA 开始以为同一门课只有一门前置,class Solution {public:    bool canFinish(int numCourses, vector<pair<int, int>>& prerequisites) {        unordered_map<int,int> hash;        for(int i=0;i<prerequisites.size();i++)        {            hash[prerequisites[i].first]=prerequisites[i].second;        }        int *d=new int[numCourses];        memset(d,0,sizeof(int)*numCourses);        for(int i=0;i<numCourses;i++)        {            if(d[i]==0)            {                int j=i;                unordered_set<int> m;                while(hash.find(j)!=hash.end())                {                    //cout<<j<<" ";                    d[j]=1;                    if(m.find(j)!=m.end()) return false;                    m.insert(j);                    j=hash[j];                }                //cout<<endl;                d[j]=1;            }        }        return true;    }};
//ac 400msclass Solution {public:    bool find_pre(unordered_map<int,vector<int>> &hash,unordered_set<int> &m,int i,int *d)    {        //if(d[i]==1) return true;        d[i]=1;        if(hash.find(i)==hash.end()) return true;        for(int j=0;j<hash[i].size();j++)        {            if(m.find(hash[i][j])!=m.end()) return false;            m.insert(hash[i][j]);            if(!find_pre(hash,m,hash[i][j],d)) return false;            m.erase(hash[i][j]);        }        return true;    }    bool canFinish(int numCourses, vector<pair<int, int>>& prerequisites) {        unordered_map<int,vector<int>> hash;        vector<int> temp;        for(int i=0;i<prerequisites.size();i++)        {            if(hash.find(prerequisites[i].first)!=hash.end()) hash[prerequisites[i].first].push_back(prerequisites[i].second);            else hash[prerequisites[i].first]={prerequisites[i].second};        }        int *d=new int[numCourses];        memset(d,0,sizeof(int)*numCourses);        for(int i=0;i<numCourses;i++)        {            unordered_set<int> m;            m.insert(i);            if(d[i]==0&&!find_pre(hash,m,i,d)) return false;        }        return true;    }};
//ac 268msclass Solution {public:    bool find_pre(unordered_map<int,vector<int>> &hash,unordered_set<int> &m,int i,int *d)    {        //if(d[i]==1) return true;        d[i]=1;        if(hash.find(i)==hash.end()) return true;        for(int j=0;j<hash[i].size();j++)        {            if(m.find(hash[i][j])!=m.end()) return false;            if(d[hash[i][j]]==1) continue;            m.insert(hash[i][j]);            if(!find_pre(hash,m,hash[i][j],d)) return false;            m.erase(hash[i][j]);        }        return true;    }    bool canFinish(int numCourses, vector<pair<int, int>>& prerequisites) {        unordered_map<int,vector<int>> hash;        vector<int> temp;        for(int i=0;i<prerequisites.size();i++)        {            if(hash.find(prerequisites[i].first)!=hash.end()) hash[prerequisites[i].first].push_back(prerequisites[i].second);            else hash[prerequisites[i].first]={prerequisites[i].second};        }        int *d=new int[numCourses];        memset(d,0,sizeof(int)*numCourses);        for(int i=0;i<numCourses;i++)        {            unordered_set<int> m;            m.insert(i);            if(d[i]==0&&!find_pre(hash,m,i,d)) return false;        }        return true;    }};
0 0