LeetCode:207. 课程表

class Solution {

public:

// 记录递归堆栈的结点

vector<bool> onpath;

vector<bool> visited;

// 记录是否成环

bool hasCircle = false;

bool canFinish(int numCourses, vector<vector<int>>& prerequisites) {

auto graph=buildGraph(numCourses,prerequisites);

//设置大小为numCourse的数组

onpath=vector<bool>(numCourses);

visited=vector<bool>(numCourses);

for(int i=0;i<numCourses;i++){

//遍历图中所有节点

traverse(graph,i);

}

//只要没有循环依赖就可以完成所有课程

return !hasCircle;

}

void traverse(vector<vector<int>>& graph,int s){

if(hasCircle){

//说明已经成环

return ;

}

if(onpaths){

hasCircle=true;

return ;

}

if(visiteds){

return;

}

//记录已经访问过结点s

onpaths=true;

//将已经访问过过的结点s标记

visiteds=true;

for(int t:graphs){

traverse(graph,t);

}

onpaths=false;

}

vector<vector<int>>buildGraph(int numCourses, vector<vector<int>>& prerequisites){

//图中共有numCourses

vector<vector<int>>graph(numCourses);

for(int i=0;i<numCourses;i++){

graphi=vector<int>();

}

for(auto& edge:prerequisites){

int from=edge1,to=edge0;

graphfrom.push_back(to);

}

return graph;

}

};

相关推荐
码匠许师傅16 小时前
【C++三方组件】POCO:跨平台系统编程全家桶
开发语言·c++
小蒋观天下17 小时前
雷击与浪涌防护:前端SPD选型、接地网误区,接地不当反而引入干扰
深度学习·算法·机器学习
Bshaya_18 小时前
红黑树详解:概念、规则与插入实现
数据结构·红黑树·二叉搜索树·平衡树·插入逻辑
WBluuue19 小时前
数据结构与算法:分块(一):块状数组、块状链表
数据结构·c++·算法·链表
圣保罗的大教堂19 小时前
leetcode 3619. 总价值可以被 K 整除的岛屿数目 中等
leetcode
路灯上の马陈20 小时前
数据结构-树
数据结构·1024程序员节
澳鹏Appen20 小时前
澳鹏重磅发布ExamOCRBench:面向端到端试卷判分的多任务基准
算法·benchmark·基准评测
必须得开心呀20 小时前
字节序大小端科普
c++·程序人生
benjormin20 小时前
Java数据结构 二叉搜索树
数据结构·算法