[210. 课程表 II] 拓扑排序模板(DFS+BFS)
Problem: 210. 课程表 II
文章目录
- 思路
- 解题方法
- Code
思路
本题是经典拓扑排序模板,通过DFS和BFS两种方式进行实现。
解题方法
-
DFS
- DFS方法的重点在于如何标记节点状态,初做题者如果只用未访问和已访问两种状态很容易陷入死结。
- 正确的做法是使用三种状态未访问,正在访问和已访问,原因是原因是如果想遇到环一定是遇到了本次DFS路径上的节点,他们属于特殊状态需要标记出。而遇到尚未访问的和别的路径访问过的节点都是没有问题的。
-
BFS
- BFS方法的重点在于多源,这也是BFS本身的一个特性,可以在图的多点同时进行BFS,参考题目994. 腐烂的橘子就很好地利用了这一特点。所以需要同时在图的多个地方进行操作时可以考虑多源BFS。
- 首先将节点入度统计出来,初始化时加入入度为0的节点,之后每次出队节点就把节点指向的节点的入度减少,再入队新产生的入度为0的节点,如此重复。
- 这一做法和手写拓扑排序十分类似。结果中如果没有包含所有节点即说明图中有环,无法拓扑排序。
Code
代码中同时有DFS和BFS两种实现
class Solution {
public:vector<int> findOrder(int numCourses, vector<vector<int>>& prerequisites) {vector<vector<int>> e(numCourses);vector<int> degree(numCourses);for(auto& prerequisity : prerequisites) {e[prerequisity[1]].push_back(prerequisity[0]);degree[prerequisity[0]]++;}auto res = dfs(numCourses, e);// auto res = bfs(numCourses, e, degree);return res;}/* DFS */vector<int> dfs(int n, vector<vector<int>>& e) {vector<int> vis(n, 0); // 0未访问, 1正在访问, 2已被收录stack<int> s;bool valid = true;for(int i = 0; i < n; i++) {if(vis[i] == 0) dfs_rec(n, e, vis, s, valid, i);}if(valid == false) return {};vector<int> res;while(!s.empty()) {res.push_back(s.top());s.pop();}return res;}void dfs_rec(int n, vector<vector<int>>& e, vector<int>& vis, stack<int>& s, bool& valid, int cur) {if(vis[cur] == 1) {valid = false;return;}if(vis[cur] == 2) {return;}vis[cur] = 1;for(auto eg : e[cur]) {dfs_rec(n, e, vis, s, valid, eg);}s.push(cur);vis[cur] = 2;return;}/* BFS */vector<int> bfs(int n, vector<vector<int>>& e, vector<int>& degree) {queue<int> q;for(int i = 0; i < n; i++) {if(degree[i] == 0) q.push(i);}vector<int> res;while(!q.empty()) {auto cur = q.front();q.pop();res.push_back(cur);for(auto& eg : e[cur]) {degree[eg]--;if(degree[eg] == 0) q.push(eg);}}if(res.size() < n) return {};return res;}
};
相关文章:
[210. 课程表 II] 拓扑排序模板(DFS+BFS)
Problem: 210. 课程表 II 文章目录 思路解题方法Code 思路 本题是经典拓扑排序模板,通过DFS和BFS两种方式进行实现。 解题方法 DFS DFS方法的重点在于如何标记节点状态,初做题者如果只用未访问和已访问两种状态很容易陷入死结。正确的做法是使用三种状…...
我的第一个python web 网站
# -*- coding: utf-8 -*-import http.server import socketserver from datetime import datetimePORT 8000import sys# ...class MyHandler(http.server.SimpleHTTPRequestHandler):def do_GET(self):if self.path /:# 如果路径是根路径,返回页面内容self.send_r…...
产品展示型wordpress外贸网站模板
孕婴产品wordpress外贸网站模板 吸奶器、待产包、孕妇枕头、护理垫、纸尿裤、孕妇装、孕婴产品wordpress外贸网站模板。 https://www.jianzhanpress.com/?p4112 床品毛巾wordpress独立站模板 床单、被套、毛巾、抱枕、靠垫、围巾、布艺、枕头、乳胶枕、四件套、浴巾wordpre…...
四信全球化拓展再启新篇!LoRa传感器与云平台领航智能感知时代
随着科技浪潮的不断推进,物联网已逐渐融入我们的生活。刚刚结束的MWC24盛会上,四信带来了一系列前沿技术成果,不仅将5G技术成功扩展至当前市场主流类型的终端,更携手联通、ASR等业界巨头,在连接、5G RedCap、AI、LoRa以…...
阿里云k8s环境下,因slb限额导致的发布事故
一、背景 阿里云k8s容器,在发布java应用程序的时候,客户端访问出现500错误。 后端服务是健康且可用的,网关层大量500错误请求,slb没有流入和流出流量。 经过回滚,仍未能解决错误。可谓是一次血的教训,特…...
【STM32+OPENMV】矩形识别
一、准备工作 有关OPENMV最大色块追踪及与STM32通信内容,详情见【STM32HAL】与OpenMV通信 二、所用工具 1、芯片:STM32F103C8T6 2、CUBEMX配置软件 3、KEIL5 4、OPENMV 三、实现功能 寻找黑色矩形,并将最大矩形的四个边缘坐标发送给STM…...
在吗?腾讯云服务器优惠价格表曝光_2023年3月报价请过目!
腾讯云服务器多少钱一年?61元一年起,2核2G3M配置,腾讯云2核4G5M轻量应用服务器165元一年、756元3年,4核16G12M服务器32元1个月、312元一年,8核32G22M服务器115元1个月、345元3个月,腾讯云服务器网txyfwq.co…...
Revit-二开之创建Plane-(7)
2016版本的Plane 2017版本的Plane 2018版本及以上版本的Plane 由此可见2017版本是一个分水岭 #if REVIT2016Plane plane = new Plane(uiDoc.Document.ActiveView...
【操作系统学习笔记】文件管理1.2
【操作系统学习笔记】文件管理1.2 参考书籍: 王道考研 视频地址: Bilibili 文件的逻辑结构 无结构文件 文件内部的数据就是一系列的二进制流或字符流组成,又称流式文件,例如 .text 文件 有结构文件 由一组相似的记录组成,又称记录式文件…...
算法归纳【数组篇】
目录 二分查找1. 前提条件:2. 二分查找边界 2.移除元素有序数组的平方长度最小的子数组59.螺旋矩阵II54. 螺旋矩阵 二分查找 参考链接 https://programmercarl.com/0704.%E4%BA%8C%E5%88%86%E6%9F%A5%E6%89%BE.html#%E6%80%9D%E8%B7%AF 1. 前提条件: 数…...
【随笔】程序员如何选择职业赛道,目前各个赛道的现状如何,那个赛道前景巨大
大家好,我是全栈小5,欢迎阅读文章! 此篇是【话题达人】系列文章,这一次的话题是《程序员如何选择职业赛道》 目录 背景热度柱状图赛道热度C/C云原生人工智能前沿技术软件工程后端JavaJavascriptPHPPython区块链大数据移动开发嵌入…...
进程之舞:操作系统中的启动、状态转换与唤醒艺术
✨✨ 欢迎大家来访Srlua的博文(づ ̄3 ̄)づ╭❤~✨✨ 🌟🌟 欢迎各位亲爱的读者,感谢你们抽出宝贵的时间来阅读我的文章。 我是Srlua,在这里我会分享我的知识和经验。&#x…...
Java面试(4)之 Spring Bean生命周期过程
一, 整个加载的完整链路图 更详细的生命周期函数链路图(仅供参考) 二, Bean实例化的四种方式: 1, 无参构造器(默认且常用)6 2, 静态工厂方法方式(factory-method指定实例化的静态方法) 3, 实例工厂方法方式(factory-bean指定bean的name,factory-method指定实例化方法) 4, 实…...
JavaSE——面向对象高级一(1/4)-static修饰成员变量、应用场景,static修饰成员方法、应用场景
目录 static修饰成员变量 类变量的应用场景 static修饰成员方法 static修饰成员方法的应用场景 static 叫静态,可可以修饰成员变量、成员方法。 成员变量按照有无static修饰,分为两种: 类变量实例变量(对象的变量ÿ…...
轻量脚本语言Lua的配置与c++调用
文章目录 lua配置下载运行lua命令lua脚本的执行C++调用lua环境配置错误和警告测试c++程序lua脚本结果Lua是一种功能强大且快速的编程语言,易于学习和使用,并且可以嵌入到应用程序中。 Lua被设计成一种轻量级的可嵌入脚本语言。它被用于各种各样的应用程序,从游戏到web应用程…...
力扣每日一道系列 --- LeetCode 160. 相交链表
📷 江池俊: 个人主页 🔥个人专栏: ✅数据结构探索 ✅LeetCode每日一道 🌅 有航道的人,再渺小也不会迷途。 LeetCode 160. 相交链表 思路: 首先计算两个链表的长度,然后判断两个链…...
设计模式-建造者模式实践案例
建造者模式(Builder Pattern)是一种创建型设计模式,它提供了一种创建对象的最佳方式。当一个对象需要多个部分或许多步骤来创建,并且需要将创建过程与表示分离时,建造者模式非常有用。建造者模式旨在找到一个解决方案&…...
freeRTOS_20240308
1.使用ADC采样光敏电阻数值,如何根据这个数值调节LED灯亮度。 HAL_TIM_PWM_Start(&htim3,TIM_CHANNEL_3); while (1){/* USER CODE END WHILE *//* USER CODE BEGIN 3 */HAL_ADC_Start(&hadc);adc_val HAL_ADC_GetValue(&hadc);printf("adc_va…...
利用chatgpt写论文使用教程
ChatGPT是人工智能技术的一种,可帮助人们综合运用和分析各种语言技巧,从而优化实验结果、加速研究流程以及提高文章质量。以下是利用ChatGPT写论文的使用教程: 综上所述,利用ChatGPT写论文涉及到一些技巧和方法,需要合…...
SMiC矩阵将于3月6日正式上线,开启数字化经济新纪元
在数字化浪潮的推动下,全球瞩目的SMiC矩阵将于2024年3月6日正式上线。这一里程碑式的事件标志着数字化经济迈入了一个全新的时代,为思洣客、合作伙伴和整个经济生态带来了前所未有的机遇和挑战。 SMiC矩阵作为引领数字化经济的新力量,始终致…...
intv_ai_mk11企业应用案例:如何将intv_ai_mk11集成进内部知识库与客服预处理流程
intv_ai_mk11企业应用案例:如何将intv_ai_mk11集成进内部知识库与客服预处理流程 1. 企业面临的挑战与AI解决方案 在当今企业运营中,知识管理和客户服务是两大核心痛点。许多企业面临以下问题: 知识库利用率低:员工难以快速找到…...
中小企业如何选择适合自己的SEO软件
了解SEO软件的基本概念 在当今数字化营销时代,中小企业如何选择适合自己的SEO软件是一个至关重要的问题。SEO(搜索引擎优化)软件的核心功能是帮助企业提升在搜索引擎上的排名,从而增加网站的曝光率和流量。但是,市面上…...
Vite多入口页面配置实战:从单页应用到多页项目的平滑升级指南
Vite多入口页面配置实战:从单页应用到多页项目的平滑升级指南 当你已经用Vite构建了一个优雅的单页应用,突然业务需求要求你扩展为多页项目时,是否感到手足无措?别担心,这种架构演进在项目成长过程中再常见不过了。作为…...
硅橡胶资源平台对接的靠谱对接企业哪家强
在深圳这座创新与制造之都,硅橡胶产业上下游企业林立,从原材料、模具设计到制品生产,形成了一个庞大而复杂的产业链。对于许多企业而言,“深圳硅橡胶资源平台对接” 的需求日益迫切——无论是寻找稳定供应商、开拓新客户ÿ…...
Vue 组态化管道流动效果:从零构建现代化流体模拟系统
1. 为什么需要管道流动模拟系统 在工业自动化和教学演示领域,可视化管道系统是一个常见需求。想象一下化工厂的液体输送管道、城市供水系统或者实验室的流体实验装置,这些场景都需要直观展示流体在管道中的流动状态。传统做法是使用静态图片或简单动画&a…...
BiliTools:B站资源高效管理与下载完全指南
BiliTools:B站资源高效管理与下载完全指南 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱,支持下载视频、番剧等等各类资源 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliTools BiliTools是一…...
新手入门指南:基于快马生成的代码理解设备配对功能实现
今天想和大家分享一个特别适合新手学习的设备配对功能实现案例。这个例子用最基础的HTML、CSS和原生JavaScript就能完成,特别适合刚接触前端开发的朋友理解交互逻辑。 项目结构设计 整个项目分为三个部分:两个模拟设备(用不同图标表示&#x…...
MIKE URBAN中如何添加污水管水质
管网中的水质一直是管网模型中的一个难题,很多群友也要求小编更新水质方面的内容,一方面,其实水质相关的内容官方资料已经很多了, 觉得没必要重复更新。另一方面,管道水质率定实在太难以率定,很难算的准确。…...
3步实现跨平台日历同步:从需求到落地
3步实现跨平台日历同步:从需求到落地 【免费下载链接】ics iCalendar (ics) file generator for node.js 项目地址: https://gitcode.com/gh_mirrors/ic/ics 场景需求:现代日程管理的痛点与解决方案 在数字化办公环境中,日程管理面临…...
Phi-3-mini-4k-instruct新手入门:Ollama部署详解,从安装到第一个对话
Phi-3-mini-4k-instruct新手入门:Ollama部署详解,从安装到第一个对话 1. 认识Phi-3-mini-4k-instruct:轻量级AI助手 Phi-3-mini-4k-instruct是一个仅有38亿参数的轻量级语言模型,由微软团队开发。虽然体积小巧,但它在…...
