leetcode_c++:图:Course Schedule(207)

原创 2016年08月28日 15:08:20

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;
    };
};
版权声明:本文为博主原创文章,未经博主允许不得转载。

leetcode GrayCode C++

格雷码
  • xiaolewennofollow
  • xiaolewennofollow
  • 2016年10月28日 14:51
  • 387

leetcode_c++:图:Course Schedule II (207)

There are a total of n courses you have to take, labeled from 0 to n - 1.Some courses may have prere...
  • mijian1207mijian
  • mijian1207mijian
  • 2016年08月28日 15:11
  • 171

leetcode 207: Course Schedule

leetcode 207 : Course Schedule
  • xudli
  • xudli
  • 2015年05月20日 05:07
  • 4257

图的深度广度搜索简单训练:Course Schedule

先看题目: There are a total of n courses you have to take, labeled from 0 to n - 1. Some courses may ...
  • Ray_sysu
  • Ray_sysu
  • 2017年03月20日 11:18
  • 126

算法练习(27):Course Schedule

题意:给出有向图,判断是否有环 分析与思路:题目看上去简单,但是没有一个套路还是挺难想的,求有向图是否有环,有一个思路清晰又实用的方法,就是用dfs遍历同时判断是否有回边,pre[node]和pos...
  • KingsonYing
  • KingsonYing
  • 2017年12月07日 23:30
  • 14

拓扑排序:课程表Course Schedule

There are a total of n courses you have to take, labeled from 0 to n - 1.Some courses may have prere...
  • gao1440156051
  • gao1440156051
  • 2016年05月31日 16:28
  • 686

【LeetCode】207. Course Schedule判断有向图是否有环

1、问题描述输入:n, [[1,0], [2,1], …., [n, n-1], [0,1], …..],假设没有重复的边 n表示总共0~n-1门课程,即n个节点 [1,0]表示先上课程0,才能上...
  • myangel_xy
  • myangel_xy
  • 2017年05月29日 10:03
  • 172

判断有向图是否有环之拓扑排序-LeetCode 207. Course Schedule

拓扑排序:对一个有向无环图(Directed Acyclic Graph简称DAG)G进行拓扑排序,是将G中所有顶点排成一个线性序列,使得图中任意一对顶点u和v,若边(u,v)∈E(G),则u在线性...
  • mengmee_pku
  • mengmee_pku
  • 2016年05月03日 15:44
  • 2214

leetcode Course Schedule系列问题,拓补排序,有向无环图

能进行拓补排序的图必须是有向无环图,直接用DFS判断图里面是否存在环,即不能存在回边,用两个时钟数组记录每个节点的进入时钟pre和返回时钟post,回边有这样的特性,如果一条边(u,v)是一条回边,那...
  • chenyaxue
  • chenyaxue
  • 2017年03月22日 09:54
  • 159

算法题——Course Schedule(C++)有向图求解BFS

将课程顺序转换为有向图的形式,该有向图中无环则为true。
  • ivyusing
  • ivyusing
  • 2017年06月02日 00:26
  • 62
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:leetcode_c++:图:Course Schedule(207)
举报原因:
原因补充:

(最多只允许输入30个字)