207. Course Schedule Medium

来源:互联网 发布:淘宝上的路吉星电子狗 编辑:程序博客网 时间:2024/06/06 04:05

先修课的安排问题,要判断能不能修完所给的课程,只要看图中有没有环。思路参考上一篇图的文章。AC代码如下。

这是用递归判断每一个点开始做DFS是否有环,实际上性能稍差,因为有重复判断的情况,可以加一个数组存储递归的结果,免去重复递归的情况。

class Solution {public:    bool canFinish(int numCourses, vector<pair<int, int> >& prerequisites) {        vector<vector<int> > matrix(numCourses);        for(int i = 0; i < prerequisites.size(); i++)        matrix[prerequisites[i].second].push_back(prerequisites[i].first);        int visit[numCourses] = {0};        for(int i = 0; i < numCourses; i++)        if(isCircle(i, matrix, visit))return false;        return true;    }    bool isCircle(int v, vector<vector<int> >& matrix, int * visit)    {    if(visit[v])return true;    visit[v] = 1;    for(int i = 0; i < matrix[v].size(); i++){    if(isCircle(matrix[v][i], matrix, visit))return true;}visit[v] = 0;return false;}};


原创粉丝点击