Leecode 207. 课程表 拓扑排序/DFS

news/2024/7/20 19:45:32 标签: 深度优先, 算法, leetcode, 数据结构, c++

原题链接:Leecode 207. 课程表

和这道题差不多:Leecode 802. 找到最终的安全状态 拓扑排序/DFS,这里的安全状态就是本题的无环的意思。
在这里插入图片描述
在这里插入图片描述
拓扑排序

class Solution {
public:
    bool canFinish(int numCourses, vector<vector<int>>& prerequisites) {
        vector<int> degree(numCourses,0);
        vector<vector<int>> g(numCourses);
        queue<int> q;
        for(int i=0;i<prerequisites.size();i++)
        {
            int x=prerequisites[i][0];
            int y=prerequisites[i][1];
            g[y].push_back(x);
            degree[x]++;
        }
        for(int i=0;i<numCourses;i++)
        {
            if(!degree[i]) q.push(i);
        }
        int sum=0;
        while(!q.empty())
        {
            int cur=q.front();
            q.pop();
            for(auto x: g[cur])
            {
                degree[x]--;
                if(!degree[x]) q.push(x);
            }
            sum++;
        }
        return numCourses==sum;
    }
};

DFS

class Solution {
public:
    vector<int> v;
    vector<vector<int>> g;
    bool canFinish(int numCourses, vector<vector<int>>& prerequisites) {
        v.resize(numCourses);
        g.resize(numCourses);
        for(int i=0;i<prerequisites.size();i++)
        {
            int x=prerequisites[i][0];
            int y=prerequisites[i][1];
            g[x].push_back(y);
        }
        for(int i=0;i<numCourses;i++)
        {
            if(!v[i] && !dfs(g,i)) return false;
        }
        return true;
    }
    bool dfs(vector<vector<int>>& g,int i)
    {
        if(v[i]) return v[i]==2;
        v[i]=1;
        for(auto x: g[i])
        {
            if(!dfs(g,x)) return false;
        }
        v[i]=2;
        return true;
    }
};

http://www.niftyadmin.cn/n/1264817.html

相关文章

Leecode 210. 课程表 II 拓扑排序

原题链接&#xff1a;Leecode 210. 课程表 II class Solution { public:vector<int> findOrder(int numCourses, vector<vector<int>>& prerequisites) {vector<int> degree(numCourses);vector<vector<int>> g(numCourses);vector…

统计学习基础——第五章 重抽样

目录 一、重抽样 1、概念 2、用途 3、缺点 4、方法 二、交叉验证法&#xff08;CV&#xff09; 1、验证集方法 &#xff08;1&#xff09;原理 &#xff08;2&#xff09;评价指标&#xff1a;均方误差 &#xff08;3&#xff09;缺陷 2、留一交叉验证法&#xff08…

统计学习基础——第六章 线性模型选择与正则化

目录 一、子集选择 1、原理 2、最优子集选择 &#xff08;1&#xff09;原理 &#xff08;2&#xff09;不足&#xff1a;计算效率不高。 &#xff08;3&#xff09;改进&#xff1a;分支定界法。 3、逐步选择 &#xff08;1&#xff09;作用 &#xff08;2&#xff0…

Leecode 784. 字母大小写全排列 DFS

原题链接&#xff1a;Leecode 784. 字母大小写全排列 DFS class Solution { public:vector<string> v;void dfs(string s,string t,int n){if(t.size()s.size()){v.push_back(t);return;}if(isupper(s[n])){char tmptolower(s[n]);dfs(s,ttmp,n1);}if(islower(s[n])){c…

统计学习基础——第七章 非线性模型

目录 一、多项式回归 1、定义 &#xff08;1&#xff09;特点 &#xff08;2&#xff09;与线性回归模型的异同 二、阶梯函数 1、定义 2、作用 3、与分段函数区别 4、步骤 三、基函数 1、原理 四、回归样条 1、分段多项式 &#xff08;1&#xff09; 定义 &#…

创建学习曲线函数——plot_learning_curve

版权声明&#xff1a;本文转自“无论如何未来很美好”&#xff0c;遵循 CC 4.0 BY-SA 版权协议&#xff0c;转载请附上原文出处链接和本声明。 本文链接&#xff1a;https://blog.csdn.net/qq_36523839/article/details/82556932 学习曲线&#xff1a;一种用来判断训练模型的一…

Leecode 74. 搜索二维矩阵 二分

原题链接&#xff1a;Leecode 74. 搜索二维矩阵 class Solution { public:bool Find(vector<int> nums,int target){int l0,rnums.size()-1;while(l<r){int midl(r-l)/2;if(target<nums[mid]) rmid;else lmid1;}return nums[l]target;}bool searchMatrix(vecto…

Leecode 77. 组合 DFS+回溯+剪枝

原题链接&#xff1a;Leecode 77. 组合 class Solution { public:vector<vector<int>> res;vector<int> tmp;void dfs(int n,int num,int k,int start){if(numk){res.push_back(tmp);return ;}if(startk-num-1>n) return ;//剪枝for(int istart;i<n;…