解題思路
感覺只是把 neetcode 的解法寫成 C++ 版本而已,改天要再練習一次。
程式碼
class Solution {
public:
map<int, set<int>> preMap;
set<int> checkCycle;
bool dfs(int currentCourse)
{
if(checkCycle.find(currentCourse) != checkCycle.end()) // alreadly visited
return false;
if(preMap[currentCourse].empty()) // no prerequisites or are all valid
return true;
checkCycle.insert(currentCourse);
for(auto c : preMap[currentCourse])
{
if(!dfs(c))
return false;
}
checkCycle.erase(currentCourse);
preMap[currentCourse].clear();
return true;
}
bool canFinish(int numCourses, vector<vector<int>>& prerequisites) {
for(int i=0; i<prerequisites.size(); i++)
preMap[prerequisites[i][0]].insert(prerequisites[i][1]);
for(int i=0; i<numCourses; i++)
{
if(!dfs(i))
return false;
}
return true;
}
};
沒有留言:
張貼留言