코테준비 - Course Schedule

정상화·2023년 2월 26일

LeetCode

목록 보기
177/222

Course Schedule


class Solution {
public:
    bool canFinish(int numCourses, vector<vector<int>> &prerequisites) {
        vector<vector<int>> nextCourses(numCourses);
        for (auto &prerequisite: prerequisites) {
            int dest = prerequisite.front();
            int src = prerequisite.back();

            nextCourses.at(src).push_back(dest);
        }

        vector<bool> finished(numCourses);
        vector<bool> visited(numCourses);
        for (int i = 0; i < numCourses; i++) {
            if(hasCycle(i, nextCourses, finished, visited)){
                return false;
            }
        }

        return true;
    }
bool hasCycle(int pos, vector<vector<int>> &nextCourses, vector<bool> &finished, vector<bool> &visited) {
        if(visited.at(pos)){
            return !finished.at(pos);
        }

        visited.at(pos) = true;
        for (auto nextCourse: nextCourses.at(pos)) {
            if (hasCycle(nextCourse, nextCourses, finished, visited)) {
                return true;
            }
        }

        finished.at(pos) = true;
        return false;
    }
};
profile
백엔드 희망

0개의 댓글