首页 > 其他分享 >LeetCode 207. 课程表

LeetCode 207. 课程表

时间:2023-07-09 11:55:24浏览次数:35  
标签:pre 207 int st 修读 vector 课程表 LeetCode

class Solution {
public:
    bool canFinish(int n, vector<vector<int>>& pre) {
        if(pre.empty()||pre[0].empty()) return true;
        vector<vector<bool>> g(n,vector<bool>(n,false));
        for(auto q:pre)
            g[q[0]][q[1]]=true;
        vector<int> st(n,false);
        //0表示未进入递归,1表示可以修读,2表示不能修读
        for(int i=0;i<n;i++)
        {
            if(!st[i]&&!dfs(i,st,n,g))
                return false;
            else if(st[i]==2)   return false;
        }
        return true;
    }
    bool dfs(int num,vector<int>& st,int n,vector<vector<bool>> &g)//尝试修第num门课
    {
        st[num]=2;
        for(int i=0;i<n;i++)
            if(g[num][i])//遍历所有先修课程
            {
                if(i==num)//如果先修课程包含自己,直接返回false
                {
                    st[num]=2;
                    return false;
                }
                if(!st[i]&&!dfs(i,st,n,g))
                    return false;
                else if(st[i]==2)   
                    return false;
            }
        st[num]=1;
        return true;
    }
};

标签:pre,207,int,st,修读,vector,课程表,LeetCode
From: https://www.cnblogs.com/tangxibomb/p/17538522.html

相关文章

  • LeetCode -- 792. 匹配子序列的单词数
     方法1:利用桶的思想同时匹配所有words中的子串(走路写法)把所有首字母相同的子串放入到一个桶中,然后遍历s,对于首字母为s[i]的单词,若其大小为1则res++,否则删掉s[i],并根据s[i+1]放入新的桶中。c++classSolution{public:intnumMatchingSubseq(strings,vecto......
  • LeetCode 206. 反转链表
    /***Definitionforsingly-linkedlist.*structListNode{*intval;*ListNode*next;*ListNode():val(0),next(nullptr){}*ListNode(intx):val(x),next(nullptr){}*ListNode(intx,ListNode*next):val(x),next(next......
  • LeetCode -- 764. 最大加号标志
     利用动态规划的思想,把每个格子上下左右连续的1的个数算出来,再从头到尾遍历一遍即可获得答案。c++classSolution{public:intorderOfLargestPlusSign(intn,vector<vector<int>>&mines){vector<vector<int>>up(n+1,vector<int>(n+1,0));......
  • 做题日记:1881. 插入后的最大值(leetcode)
    题目:给你一个非常大的整数n和一个整数数字x,大整数n 用一个字符串表示。n中每一位数字和数字x都处于闭区间[1,9]中,且n可能表示一个负数。你打算通过在n的十进制表示的任意位置插入x来最大化n的数值​​​​​​。但不能在负号的左边插入x。例如,如......
  • LeetCode 200. 岛屿数量
    classSolution{public:boolst[310][310];intdx[4]={0,0,-1,1},dy[4]={-1,1,0,0};intm,n;intnumIslands(vector<vector<char>>&g){intres=0;n=g.size(),m=g[0].size();for(inti=0;i<n;i++)......
  • LeetCode 169. 多数元素
    classSolution{public:intmajorityElement(vector<int>&nums){intcnt=1;intres=nums[0];for(inti=1;i<nums.size();i++){if(nums[i]==res)cnt++;elsecnt--;i......
  • [LeetCode] 2024. Maximize the Confusion of an Exam
    Ateacheriswritingatestwith n true/falsequestions,with 'T' denotingtrueand 'F' denotingfalse.Hewantstoconfusethestudentsby maximizing thenumberof consecutive questionswiththe same answer(multipletruesormultiple......
  • [LeetCode] 2178. Maximum Split of Positive Even Integers
    Youaregivenaninteger finalSum.Splititintoasumofa maximum numberof unique positiveevenintegers.Forexample,given finalSum=12,thefollowingsplitsare valid (uniquepositiveevenintegerssummingupto finalSum): (12), (2+10), ......
  • leetcode-1629-easy
    SlowestKeyYouhaveabombtodefuse,andyourtimeisrunningout!Yourinformerwillprovideyouwithacirculararraycodeoflengthofnandakeyk.Todecryptthecode,youmustreplaceeverynumber.Allthenumbersarereplacedsimultaneously.I......
  • leetcode-1652-easy
    DefusetheBombYouhaveabombtodefuse,andyourtimeisrunningout!Yourinformerwillprovideyouwithacirculararraycodeoflengthofnandakeyk.Todecryptthecode,youmustreplaceeverynumber.Allthenumbersarereplacedsimultaneously......