53、图论-课程表

ops/2024/9/23 22:23:54/

思路:

 其实就是图的拓扑排序,我们可以构建一个图形结构,比如[0,1]表示1->0,对于0来说入度为+1。

遍历结束后,从入度为0的开始遍历。引文只有入度为0的节点没有先决条件。然后依次减少1。直到所有节点入度都为0.然后记录下来count和需要学习课程数相比如果相等表示可以。不相等表示存在环。

java">class Solution {public static class Node {public int name;public int in;public ArrayList<Node> nexts;public Node(int n) {name = n;in = 0;nexts = new ArrayList<>();}}public static boolean canFinish(int numCourses, int[][] prerequisites) {if (prerequisites == null || prerequisites.length == 0) {return true;}Map<Integer, Node> nodes = new HashMap<>();for (int[] arr : prerequisites) {//目标课程编号int to = arr[0];//前驱课程编号int from = arr[1];if (!nodes.containsKey(to)) {nodes.put(to, new Node(to));}if (!nodes.containsKey(from)) {nodes.put(from, new Node(from));}//获取目标课程 节点Node t = nodes.get(to);Node f = nodes.get(from);//表示前驱课程指向目标课程  就是图的有向指标f.nexts.add(t);//目标课程入度++t.in++;}int needPrerequisiteNums = nodes.size();//建立一个入度为0 队列 表示这个是起始节点Queue<Node> zeroInQueue = new LinkedList<>();for (Node node : nodes.values()) {if (node.in == 0) {zeroInQueue.add(node);}}int count = 0;//拓扑排序  一次减少入度  如果count!=needPrerequisiteNums 说明有环,循环依赖 while (!zeroInQueue.isEmpty()) {Node cur = zeroInQueue.poll();count++;for (Node next : cur.nexts) {if (--next.in == 0) {zeroInQueue.add(next);}}}return count == needPrerequisiteNums;}
}


http://www.ppmy.cn/ops/10972.html

相关文章

ESP32-Thonny 拍摄图片到SD卡

前言&#xff1a; 代码运行在Thonny 添加main.py到单片机中&#xff1a; 可以先运行一下试试&#xff1a;会输出以下信息&#xff1a; 没有问题的话&#xff08;SD卡挂载成功&#xff0c;摄像头初始化成功&#xff09;运行一次主程序后&#xff0c;闪光灯会闪烁一下。 代码&…

机器学习——逻辑回归

逻辑回归损失函数选择 逻辑回归通常采用交叉熵损失&#xff08;也称为对数损失&#xff09;而不是均方误差损失的原因主要有以下几点&#xff1a; 概率解释 逻辑回归模型的输出可以被解释为属于某个类别的概率。交叉熵损失直接衡量的是模型预测概率分布与真实标签的概率分布之…

服务器基本故障和排查方法

前言 服务器运维工作中遇到的问题形形色色&#xff0c;无论何种故障&#xff0c;都需要结合具体情况&#xff0c;预防为主的思想&#xff0c;熟悉各种工具和技术手段&#xff0c;养成良好的日志分析习惯&#xff0c;同时建立完善的应急预案和备份恢复策略&#xff0c;才能有效…

代码随想录算法训练营第三十五天| LeetCode860.柠檬水找零、LeetCode406.根据身高重建队列、LeetCode452.用最少数量的箭引爆气球

LeetCode 860 柠檬水找零 题目链接&#xff1a;860. 柠檬水找零 - 力扣&#xff08;LeetCode&#xff09; 【解题思路】 情况1、客户支付5元的钞票——直接收下&#xff0c;不用找零 情况2、客户支付10元钞票&#xff1a; 如果手里有5元钞票&#xff0c;进行找零 如果手里没…

最新AI创作系统ChatGPT网站源码Midjourney-AI绘画系统,Suno-v3-AI音乐生成大模型。

一、前言 SparkAi创作系统是基于ChatGPT进行开发的Ai智能问答系统和Midjourney绘画系统&#xff0c;支持OpenAI-GPT全模型国内AI全模型。本期针对源码系统整体测试下来非常完美&#xff0c;那么如何搭建部署AI创作ChatGPT&#xff1f;小编这里写一个详细图文教程吧。已支持GPT…

MyBatis<foreach>标签的用法

文章目录 1. foreach 标签2. MyBatis&#xff1c;foreach&#xff1e;标签的使用2.1 批量插入2.2 批量编辑2.3 批量查询2.4 使用 foreach 遍历 map 1. foreach 标签 foreach 可以在 SQL 语句中进行迭代一个集合。foreach元素的属性主要有 item&#xff0c;index&#xff0c;co…

Mybatisplus LambdaQueryWrapper表达式使用DATE_FORMAT比较日期函数

背景&#xff1a; 最近遇到一个问题&#xff0c;数据库保存的日期字段是如下格式 但是我们需要比较的日期为 2020-08-01格式&#xff0c; 所以我们要将日期格式化 使用 Mybatisplus LambdaQueryWrapper的情况下可用下面的方式做参考 LambdaQueryWrapper<SysDicCode> la…

java从零开始的较为平滑的学习流程

这篇文章非常适合以下人群&#xff1a; 初学者&#xff1a;对于刚开始学习 Java 的人来说&#xff0c;这个学习计划提供了一个清晰的起点&#xff0c;帮助大家逐步建立坚实的基础。 个人开发者&#xff1a;个人开发者可能会发现这个计划特别有用&#xff0c;因为它不仅涵盖了技…