您的位置:首页 > 其它

210. Course Schedule II

2016-04-18 23:38 316 查看
class Solution {
public:
bool find_pre(unordered_map<int,vector<int>> &hash,unordered_set<int> &m,int i,int *d,stack<int> &v)
{
d[i]=1;
v.push(i);
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,v)) return false;
m.erase(hash[i][j]);
}
return true;
}
vector<int> findOrder(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);
vector<int> v;
for(int i=0;i<numCourses;i++)
{
stack<int> s;
unordered_set<int> m;
m.insert(i);
if(d[i]==0&&!find_pre(hash,m,i,d,s)) return {};
while(!s.empty())
{
v.push_back(s.top());
s.pop();
}
}
return v;
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: