【算法学习】拓扑排序

news2024/9/23 11:14:57

文章目录

  • 拓扑排序
  • 课程表

拓扑排序

算法原理:
1.先找出图中入度为0的点,将该点加入到队列中
2.队列不为空时,拿出队头元素加入到最终结果
3.再遍历该点的邻接阵,将连接该点的点的入度全部减减
4.判断减减的点是否为入度为0,为0就加入队列继续操作
5.最后判断所有点的入度是否有不为0的,有就代表里面存在环
在这里插入图片描述

课程表

在这里插入图片描述
思路:创建一个邻接表,统计边,创建数组in,里面存放的是该点的入度数,先遍历遍历数组,将数放入邻接表,并且统计入度数,遍历数组找到为0的放入队列,当队列不为空取队头元素,删除与队头元素相连的边,入度数减减,如果入度数为0存入队列重复操作。直到循环结束,判断是否有入度数不为0的点,有的话代表有环,返回false,没有的话返回true。
代码实现:

class Solution {
public:
    bool canFinish(int numCourses, vector<vector<int>>& prerequisites) {
        unordered_map<int,vector<int>> edges;
        vector<int> in(numCourses);

        for(auto& e:prerequisites)
        {
            int a=e[0],b=e[1];
            edges[b].push_back(a);
            in[a]++;
        }

       queue<int> q;
       for(int i=0;i<numCourses;i++)
       {
        if(in[i]==0)
        q.push(i);
       }

       while(!q.empty())
       {
        int t=q.front();
        q.pop();
        for(auto& e:edges[t])
        {
            in[e]--;
            if(in[e]==0) q.push(e);
        }
       }

       for(int i=0;i<numCourses;i++)
       {
        if(in[i]) return false;
       }
       return true;
    }
};

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1678340.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

渗压计与水位计的区别:监测工具的关键用途解析

在土木工程和水利工程领域&#xff0c;渗压计和水位计是两种重要的监测工具。它们虽然在外观和一些基本功能上可能相似&#xff0c;但其实各有专长&#xff0c;适用于不同的监测需求。了解它们的区别对于正确选择和应用这些工具至关重要本文将探讨渗压计和水位计的主要区别&…

【挑战全网】最全高德地图充电桩接入指南,流量必火!

分享《一套免费开源充电桩物联网系统&#xff0c;是可以立马拿去商用的&#xff01;》 一、和高德直接互联互通的优势&#xff1a; 1、高德官方直接互联互通&#xff0c;提供给合作商户独立发展自主权&#xff0c;不依赖任何第三方平台; 2、自己控制电站的上线、下线、修改电…

2024年开抖店都需要做哪些准备?这些条件缺一不可

大家好&#xff0c;我是电商花花。 作为目前国内最受欢迎的短视频电商平台&#xff0c;抖音将成为众多创业者的首选平台。 在往年我们都知道抖音小店市场很多&#xff0c;红利很大&#xff0c;利润大&#xff0c;不少人都通过抖音小店实现了脱贫&#xff0c;也有部分上班族获…

VC++6.0 常用的文件对话框和目录选择对话框

1&#xff0c;文件对话框 //1,弹出文件打开对话框CString strFileName "";char szFilter[] {"exe files(*.exe)|*.exe|All Files(*.*)|*.*|"};CFileDialog dlg(TRUE,NULL,NULL,OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,szFilter,NULL);if(dlg.DoModal() …

三清互联:公司已形成“研发-创新-增收-研发”良性循环

三清互联自创立之初便以电力物联网感知层终端及成套设备的研发、设计、生产和销售为核心&#xff0c;致力于为电力行业提供前沿的技术解决方案。多年来&#xff0c;公司主营业务、主要产品及经营模式均保持稳定&#xff0c;不断在电力物联网感知层领域深化探索与创新。 初创期的…

品鉴中的礼仪习俗:如何遵循正确的红酒品鉴礼仪

在品鉴云仓酒庄雷盛红酒时&#xff0c;遵循正确的礼仪习俗不仅能展现个人的修养&#xff0c;还能更好地领略葡萄酒的风味。下面我们将探讨红酒品鉴中的礼仪习俗。 首先&#xff0c;当我们拿起酒杯时&#xff0c;应该注意不要晃动酒杯&#xff0c;以免扰动其中的酒液。同时&…

运营商二次放号查询接口如何对接

运营商二次放号查询接口又叫手机二次放号检测接口&#xff0c;指的是输入手机号和日期&#xff0c;查看在该日期之前是不是二次放号。那么运营商二次放号查询接口如何对接呢&#xff1f; 这边我找到了一家叫数脉API的公司&#xff0c;他们刚好有这个接口&#xff0c;首先注册账…

nmap端口扫描工具——Win10

Nmap安装流程&#xff1a; Nmap官网链接&#xff1a;Download the Free Nmap Security Scanner for Linux/Mac/Windows Nmap参考文档链接&#xff1a;https://nmap.org/book/toc.html Nmap使用流程&#xff1a; Nmap软件主页面&#xff1a; 中文版&#xff1a; nmap -T4 -…

JavaWeb-学习笔记

第一章 Tomcat 介绍 前言 使用Tomcat服务器&#xff0c;必须先安装JDK&#xff0c;因为Tomcat使用的是java语言开发的。 在系统环境变量中&#xff0c;必须包含**%JAVA_HOME%\bin**。否则Tomcat无法启动 环境变量配置&#xff1a; 此电脑 --> 右键 --> 属性高级系统…

代码随想录Day 47|Leetcode|Python|392.判断子序列 ● 115.不同的子序列

392.判断子序列 给定字符串 s 和 t &#xff0c;判断 s 是否为 t 的子序列。 字符串的一个子序列是原始字符串删除一些&#xff08;也可以不删除&#xff09;字符而不改变剩余字符相对位置形成的新字符串。&#xff08;例如&#xff0c;"ace"是"abcde"的…

Lobe Chat–在线AI对话聊天机器人,一键部署,免费开源

现代化设计的开源 ChatGPT/LLMs 聊天应用与开发框架 支持语音合成、多模态、可扩展的&#xff08;function call&#xff09;插件系统 一键免费拥有你自己的 ChatGPT/Gemini/Claude/Ollama 应用 项目演示 支持多种模型接口 支持语音输入输出 支持云端同步 丰富多彩非常实用的应…

第二证券今日投资参考:美宣布对华电动汽车等加征关税 AI应用或加速落地

昨日&#xff0c;两市股指早盘一度拉升&#xff0c;随后震动回落&#xff0c;盘中保持窄幅震动收拾走势。截至收盘&#xff0c;沪指微跌0.07%报3145.77点&#xff0c;深证成指跌0.05%报9668.73点&#xff0c;创业板指跌0.26%报1855.6点&#xff0c;北证50指数涨0.74%&#xff1…

istio资源字段参考文档

virtual service&#xff1a; Istio / Virtual ServiceConfiguration affecting label/content routing, sni routing, etc.https://istio.io/latest/docs/reference/config/networking/virtual-service/

opencv4.8.0 GPU版本各平台编译

一、opencv4.8.0 ubuntu22.04上编译&#xff1a; 用cmake进行编译,需要配置三次。选中world选项&#xff0c;输入opencv_contrib_module路径。 ubuntu22.04上编译&#xff1a; cmake \ -D CMAKE_BUILD_TYPERELEASE \ -D CMAKE_INSTALL_PREFIX/usr/local \ -D BUILD_opencv_p…

1:硬件测试面试

1&#xff1a;板级测试 . JTAG和Boundary Scan 对于硬件板级测试&#xff0c;我使⽤JTAG和Boundary Scan技术进⾏⾃动化测试。这些技术可以帮助我访问PCB 上的芯⽚引脚&#xff0c;从⽽进⾏信号测量、连通性测试和故障诊断。 2&#xff1a;整机测试 3&#xff1a;测试准备 4…

(Java面试题——基础版)JVM、JRE和JDK的关系

JVM Java Virtual Machine是Java虚拟机 &#xff0c;Java程序需要运行在虚拟机上 &#xff0c;不同的平台有自己的虚拟机 &#xff0c;因此Java语言可以 实现跨平台。JVM 负责将 Java 字节码&#xff08;即编译后的 .class 文件&#xff09;翻译成特定平台上的机器码&#xff0…

Blender雕刻建模_笔刷

1.雕刻模式 雕刻Scuplt&#xff0c;一种常用的建模方式 -选中物体&#xff0c;进入雕刻模式 -重构网格&#xff08;修改体素大小&#xff0c;点击重构网格&#xff09;给物体添加更多面 -选择笔刷&#xff0c;雕刻 -退出雕刻模式 2.重构网格 一种按体积的细分方式&#xf…

uniapp地图电子围栏(多边形)绘制和编辑

uniapp地图电子围栏&#xff08;多边形&#xff09;绘制和编辑 背景实现思路代码实现注意事项尾巴 背景 最近项目中需要在地图上进行电子围栏的绘制和编辑&#xff0c;这里将实现的思路给大家分享下。由于uniapp官方提供的map组件功能不全&#xff0c;还有在APP端&#xff08;…

echarts去掉网格线

柱子后面白色的线太丑了&#xff01; 去掉他 x轴平行的线&#xff0c;就写在yAxis下面 yAxis: {type: value,splitLine: {lineStyle: {type: dashed, // 虚线样式color: rgba(255, 255, 255, 0.15) // 虚线颜色}},//去除网格线}, 这个颜色一定要加‘’&#xff0c;不然不生效…

使用python开发的闭运算调试器

使用python开发的开运算调试器 简介效果代码 简介 用来调试闭运算效果的小工具&#xff0c;滑动条可以控制滤波核的大小&#xff0c;用来查看不同滤波核下的闭运算效果。 效果 代码 import sys from PyQt5.QtWidgets import QApplication, QWidget, QVBoxLayout, QHBoxLayou…