关闭

leetcode_c++:图:Course Schedule(207)

81人阅读 评论(0) 收藏 举报
分类:

There are a total of n courses you have to take, labeled from 0 to n - 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?

For example:

2, [[1,0]]

There are a total of 2 courses to take. To take course 1 you should have finished course 0. So it is possible.

2, [[1,0],[0,1]]

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.

//学习课程A要先学课程B,给出一个课程学习顺序,问这些课程能不能学完


算法

拓扑排序

DFS的算法


class Solution {
public:
    bool canFinish(int numCourses, vector<pair<int, int>>& prerequisites) {
        if (numCourses == 0 || prerequisites.empty())
            return true;
        graph = vector<vector<int> >(numCourses);
        vis = vector<int>(numCourses, 0); // not visit
        for (auto i : prerequisites) {
            graph[i.second].push_back(i.first);
        }
        for (int u = 0; u < numCourses; ++u) {
            if (0 == vis[u] && !dfs(u))
                return false;
        }
        return true;
    }
private:
    vector<vector<int> > graph;
    vector<int> vis;
    bool dfs(int u) {
        vis[u] = 1; // visiting
        for (auto v : graph[u]) {
            if (vis[v] == 1)
                return false;
            if (dfs(v) == false)
                return false;
        }
        vis[u] = 2; // visited
        return true;
    };
};
0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:103880次
    • 积分:6702
    • 等级:
    • 排名:第3496名
    • 原创:589篇
    • 转载:2篇
    • 译文:0篇
    • 评论:2条
    最新评论