Leetcode 210. 课程表 II 解题思路及C++实现
解题思路:
与第207题很像,多的是需要存储一个修读课程的可行解,所以在dfs函数内,当判断第i门课程不存在环时,需要将其push_back进数组cur中。
由于是用深度优先搜索的方法,所以存储在cur数组中的顺序是反过来的,因为graph中第 i 行存储的是修读课程 i 所需的课程。
在测试案例中,会有空的prerequisites数组,所以需要在findOrder函数中遍历一次所有课程,保证cur数组的size等于课程数量。
class Solution {
public:vector<int> findOrder(int numCourses, vector<vector<int>>& prerequisites) {//先建立graphvector<vector<int> > g(numCourses, vector<int>());for(auto a: prerequisites){g[a[1]].push_back(a[0]);}vector<int> visit(numCourses);vector<int> cur;for(int i = 0; i < numCourses; i++){if(!dfs(g, visit, cur, i)){return {};}}reverse(cur.begin(), cur.end());return cur;}bool dfs(vector<vector<int> >& g, vector<int>& visit, vector<int>& cur, int i){// if(cur.size() == g.size()) return true;if(visit[i] == -1) return false;if(visit[i] == 1) return true;visit[i] = -1;for(auto a: g[i]){if(!dfs(g, visit, cur, a)) return false;}//第i门课程的修读不存在环,将其push_back到数组cur中cur.push_back(i);visit[i] = 1;return true;}
};
Leetcode 210. 课程表 II 解题思路及C++实现相关推荐
- leetcode *210. 课程表 II(拓补排序)(2020.5.17)
[题目]*210. 课程表 II 现在你总共有 n 门课需要选,记为 0 到 n-1. 在选修某些课程之前需要一些先修课程. 例如,想要学习课程 0 ,你需要先完成课程 1 ,我们用一个匹配来表示他们 ...
- LeetCode—210. 课程表 II
210. 课程表 II 题目描述:现在你总共有 numCourses 门课需要选,记为 0 到 numCourses - 1.给你一个数组 prerequisites ,其中 prerequisite ...
- LeetCode 210. 课程表 II(拓扑排序)
1. 题目 现在你总共有 n 门课需要选,记为 0 到 n-1. 在选修某些课程之前需要一些先修课程. 例如,想要学习课程 0 ,你需要先完成课程 1 ,我们用一个匹配来表示他们: [0,1] 给定课 ...
- Leetcode 90. 子集 II 解题思路及C++实现
解题思路: 经典的深度优先搜索问题. 这里,根据子集的元素个数 i ,分别进行 dfs .因为 nums 数组中有重复元素,所以在 dfs 程序中,需要有一个去重的判断. 判断逻辑为:当前元素与上一个 ...
- Leetcode 210.课程表II
Time: 20190903 Type: Medium 考察:拓扑排序 题目描述 现在你总共有 n 门课需要选,记为 0 到 n-1. 在选修某些课程之前需要一些先修课程. 例如,想要学习课程 0 , ...
- LeetCode 210. 课程表 II(Kahn)
1.题目 现在你总共有 n 门课需要选,记为 0 到 n-1. 在选修某些课程之前需要一些先修课程. 例如,想要学习课程 0 ,你需要先完成课程 1 ,我们用一个匹配来表示他们: [0,1] 给定课程 ...
- 210. 课程表 II kahn求拓扑图算法
210. 课程表 II 难度:中等 题目描述 解题思路 以前没有写过图的,但是有了解过拓扑排序,根据提示还有算法描述很容易就写出代码了.用栈和队列都行,如果用栈就是深度优先搜索,用队列就是广度优先搜索 ...
- 207.课程表 | 210.课程表II(拓扑排序)
207.课程表 你这个学期必须选修 numCourses 门课程,记为 0 到 numCourses - 1 . 在选修某些课程之前需要一些先修课程. 先修课程按数组 prerequisites 给出 ...
- LeetCode 中等难度 92. 反转链表 II解题思路
92. 反转链表 II 题目:中等难度 反转从位置 m 到 n 的链表.请使用一趟扫描完成反转. 说明: 1 ≤ m ≤ n ≤ 链表长度. 示例: 输入: 1->2->3->4-& ...
最新文章
- 佳能ts3100打印机使用说明书_佳能TS9120打印机完全满足家庭使用—最具性价比打印机...
- Win7 下面 用easybcd 引导 安装 ubuntu 14.04
- Cordova打包教程知识体系整理(Vue项目打包成ipa)
- python函数调用位置_Python: 浅谈函数局部变量快在哪
- 数据结构与算法之希尔排序
- linux文件编程(3)—— main函数传参、myCp(配置成环境变量)、修改配置文件、整数和结构体数组写到文件
- 用java写四则混合运算,JAVA写的四则混合运算-JSP教程,Java技巧及代码
- 开发html,HTML开发基础
- 循环体中对集合进行增删时报错:java.util.ConcurrentModificationException
- php168批量添加会员,ecshop快速批量添加会员
- 威纶通定时循环操作宏_「精品详解」威纶通触摸屏宏指令应用(三)
- java 时间 转化成数字_将时间转化为数字 java
- App开发 - 谈谈App架构的演进
- 10秒钟搞定圆柱齿轮设计所有课题
- 阴阳师ios和android,《阴阳师》App Store表现优异,安卓苹果惊喜同服
- 房屋装修设计更显档次需要从几个方面入手
- 如何彻底卸载2345全家桶?
- GPS的一些浅显知识兼介绍一下GPS测试仪
- linux diff使用方法,Linux diff 使用教程
- Sqlserver官网下载时各版本含义
热门文章
- c语言中int*point 其中point是指针变量名,2012年计算机等级二级C语言章节习题及答案(9)...
- fork+exit+php,php实现简单的守护进程创建、开启与关闭操作
- inotify+rsync实时同步服务部署
- [BZOJ4994] [Usaco2017 Feb]Why Did the Cow Cross the Road III(树状数组)
- 移动机器人路径规划---深蓝学院培训学习记录
- Android启动过程以及各个镜像的关系
- Cloudera Manager(CDH5)内部结构、功能包括配置文件、目录位置等
- 学习scala的网站汇总
- TextView使用实例
- Docker学习与和应用(二)_使用Docker