欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 新闻 > 会展 > 10.1 10.3 图DFS 中等 207 Course Schedule 210 Course Schedule Ⅱ

10.1 10.3 图DFS 中等 207 Course Schedule 210 Course Schedule Ⅱ

2025/3/31 2:42:32 来源:https://blog.csdn.net/emmm_Yeah/article/details/142668113  浏览:    关键词:10.1 10.3 图DFS 中等 207 Course Schedule 210 Course Schedule Ⅱ

207 Course Schedule

在这里插入图片描述
在这里插入图片描述

class Solution {
public:bool hasCycle(int course ,unordered_map<int,vector<int>>& graph,vector<int>& visitStatus){//正在访问的结点再次被访问,存在环if(visitStatus[course] == 1)return true;//该结点已经被访问了且没有环,访问完毕了if(visitStatus[course] == 2)return false;//标记正在被访问的结点visitStatus[course] = 1;for(int pre : graph[course]){if(hasCycle(pre , graph ,visitStatus)){return true;}}//所有结点访问完毕,且不存在环,标记为2visitStatus[course] = 2;return false;}bool canFinish(int numCourses, vector<vector<int>>& prerequisites) {//这道题是关于图的问题,不能存在环//使用数组进行保存//创建图,由于后序需要DFS查找,使用哈希表更为方便unordered_map<int,vector<int>> graph;for(const auto& pair : prerequisites){graph[pair[0]].push_back(pair[1]);}//创建访问数组,初始状态为0vector<int> visitStatus(numCourses,0);//遍历每个结点,使用DFS判断是否有环for(int i = 0 ; i < numCourses ;i++){if(hasCycle(i,graph,visitStatus)){return false;}}return true;}
};

210 Course Schedule II

在这里插入图片描述

在这里插入图片描述

class Solution {
public:bool DFS(int course,unordered_map<int,vector<int>>& graph ,vector<int>& visitStatus,vector<int>& route){if(visitStatus[course] == 1){//有环return true; }if(visitStatus[course] == 2){//无环不受影响,但也不会继续向下执行return false;  }visitStatus[course] = 1;//判断所有先修课程for(int pre : graph[course]){if(DFS(pre , graph ,visitStatus ,route)){//有环return true;}}visitStatus[course] = 2;//记录路径中route.push_back(course);return false;}vector<int> findOrder(int numCourses, vector<vector<int>>& prerequisites) {//和Ⅰ一致//但是结果需要给出完成课程的过程序号//相当于判断是否有环+找简单路径//简单路径 **先找点** 使用的还是DFSint m = prerequisites.size();//路径记录vector<int> route;if(!m){//没有先序序列,返回1...numCourses-1的vector<int>for(int i = 0 ; i < numCourses;i++){route.push_back(i);}return route;}//找简单路径的过程中,判断是否有环//记录表unordered_map<int,vector<int>> graph;for(const auto& pair: prerequisites){graph[pair[0]].push_back(pair[1]);}//做标记是否走过 0 走过了 1 又走到了 2 vector<int> visitStatus(numCourses,0);for(int i = 0 ; i < numCourses ; i++){if(DFS(i, graph ,visitStatus, route)){return {};}}return route;}
};

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词