【课程表算法题--拓扑排序】

课程表1

你这个学期必须选修 numCourse 门课程,记为 0 到 numCourse-1。在选修某些课程之前需要一些先修课程。 例如,想要学习课程 0 ,你需要先完成课程 1 ,我们用一个匹配来表示他们:[0,1]。给定课程总量以及它们的先决条件,请你判断是否可能完成所有课程的学习?
示例 1:
输入: 2, [[1,0]]
输出: true
解释: 总共有 2 门课程。学习课程 1 之前,你需要完成课程 0。所以这是可能的。

示例 2:
输入: 2, [[1,0],[0,1]]
输出: false
解释: 总共有 2 门课程。学习课程 1 之前,你需要先完成​课程 0;并且学习课程 0 之前,你还应先完成课程 1。这是不可能的。

import java.util.Scanner;
import java.util.Stack;public class Main{public static void main(String[] args){Scanner sc = new Scanner(System.in);  //eg:输入2int numCourse = sc.nextInt();sc.close();int[][] matrix = new int[][]{{1,0},{0,1}};System.out.println(ifFinishCourse(numCourse,matrix));}//函数ifFinishCourse,判断是否可以完成课程public static boolean ifFinishCourse(int numCourse,int[][] matrix){int[] indegree = new int[numCourse];for(int i=0;i<matrix.length;i++){indegree[matrix[i][1]]++;}//创建一个栈Stack<Integer> s = new Stack<>();for(int i=0;i<indegree.length;i++){if(indegree[i] == 0){s.push(i);}}int count = 0;  //用于计数,判断是否有环while(!s.isEmpty()){int tempN = s.pop();count++;//更新入度数组for(int i=0;i<matrix.length;i++) {if(matrix[i][0] == tempN){indegree[matrix[i][1]]--;if(indegree[matrix[i][1]] == 0){s.push(matrix[i][1]);}}}}if(count<numCourse){return false;} else {return true;}}
}

课程表2

你这个学期必须选修 numCourse 门课程,记为 0 到 taskNum-1。在选修某些课程之前需要一些先修课程。 例如,想要学习课程 0 ,你需要先完成课程 1 ,我们用一个匹配来表示他们:[0,1]。给定课程总量以及它们的先决条件,请你判断完成所有课程的学习的最少次数,假设可以并行选修taskNum课程,请计算完成所有课程所需最短时间?
示例 1:
输入: 3
1
1>2
输出: 2
解释: 总共有 3 门课程,选修1个课程。学习课程 1 之前,你需要完成课程 2。总共需要2。
示例 2:
输入:9
6
1>2
2>3
2>4
4>5
6>4
8>7
输出: 4

import java.nio.charset.StandardCharsets;
import java.util.ArrayDeque;
import java.util.Queue;
import java.util.Scanner;/*** 拓扑排序** @author* @DATE 2024/6/22**/
public class TopologicalSort {public static void main(String[] args) {Scanner cin = new Scanner(System.in, StandardCharsets.UTF_8.name());int taskNum = cin.nextInt();int relationNum = cin.nextInt();int[][] relations = new int[relationNum][];if (relationNum > 0) {cin.nextLine();for (int i = 0; i < relationNum; i++) {String[] str = cin.nextLine().split(">");relations[i] = new int[2];relations[i][0] = Integer.parseInt(str[0]);relations[i][1] = Integer.parseInt(str[1]);}}cin.close();System.out.println(getMinTime(taskNum, relations));}private static int getMinTime(int taskNum, int[][] relations) {/*** 创建拓扑排序* 创建一个入度表* 遍历入度表,把入读为0的全部入队列* 队列出队,判断当前任务的入度是否为0,如果为0,加入队列,遍历完成就是最少次数*/if (taskNum == 0) {return 0;}// 记录每个节点入度int[] num = new int[taskNum];for (int i = 0; i < relations.length; i++) {// 入度指的是一个点被多个边指向num[relations[i][0]]++;}Queue<Integer> queue = new ArrayDeque<>();for (int i = 0; i < taskNum; i++) {// 首先将入度为0的点添加到队列if (num[i] == 0) {queue.add(i);}}int time = 0;while (!queue.isEmpty()) {int size = queue.size();for (int i = 0; i < size; i++) {// 当前节点出队时,将该节点的入度-1int temp = queue.poll();for (int j = 0; j < relations.length; j++) {// relations[j][1]代表依赖节点 == 当前出队节点if (relations[j][1] == temp) {// 当前节点入度-1num[relations[j][0]]--;if (num[relations[j][0]] == 0) {// 入度为0的当前节点,加入队列queue.add(relations[j][0]);}}}}time++;}return time;}
}

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

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

相关文章

【仿真建模-anylogic】INetwork相关接口说明

Author&#xff1a;赵志乾 Date&#xff1a;2024-06-22 Declaration&#xff1a;All Right Reserved&#xff01;&#xff01;&#xff01; 1. 类图 2. 说明 INetwork为辊道网络、路线网路的顶层接口&#xff0c;其组成元素有节点和路径两种&#xff0c;对应的接口为INode、IP…

vue:vue2与vue3如何全局注册公共组件(包括涉及到的相关方法函数的讲解)

目录 第一章 vue2全局注册公共组件 1.1 方法一&#xff1a;逐个注册 1.2 方法二&#xff1a;批量注册 1.2.1 require.context()方法解释 第二章 vue3全局注册公共组件 1.1 方法一&#xff1a;逐个注册 1.2 方法二&#xff1a;批量注册 第一章 vue2全局注册公共组件 Vue…

[C++][数据结构][跳表]详细讲解

目录 0.什么是跳表&#xff1f;1.SkipList的优化思路2.SkipList的效率如何保证&#xff1f;3.SkipList实现4.SkipList VS 平衡搜索树 && Hash 0.什么是跳表&#xff1f; SkipList本质上也是一种查找结构&#xff0c;用于解决算法中的查找问题&#xff0c;跟平衡搜索树…

Linux测试服务器端口是否打开

前言 服务器端口在计算机网络通信中扮演着至关重要的角色&#xff0c;其作用可以归纳如下&#xff1a; 区分不同的应用程序或服务&#xff1a; 服务器端口用于标识和定位不同应用程序或服务在服务器上的通信入口。 通过不同的端口号&#xff0c;服务器可以同时运行多个应用程…

73. UE5 RPG 优化投射物以及敌人生成

解决发射物会与地面产生交互的问题 之前一直遇到发射物的体积过大会在发射时&#xff0c;和地面产生交互&#xff0c;我们可以调整小一些&#xff0c;然后为了防止它和自身产生交互事件。我们可以实现它在生成后&#xff0c;不会触发相关事件&#xff0c;而是在一定时间后。 对…

【STM32--Cortex-M3】

STM32-Cortex-M3 ■ Cortex-M3 处理器内核到基于Cortex-M3的MCU■ ARM的各种架构版本■ 指令集■ Cortex-M3简介■ Cortex-M3寄存器组■ Cortex-M3■ Cortex-M3■ Cortex-M3 ■ Cortex-M3 处理器内核到基于Cortex-M3的MCU Cortex-M3处理器内核是单片机的中央处理单元&#xff…

WordPress简单好看的线报主题模板源码

安装说明 到WordPress管理后台中的「外观」-「主题」中点击「添加」&#xff0c;选择baolog的主题包进行上传安装并启用即可。 提示&#xff1a;为了防止主题不兼容&#xff0c;请在安装主题前进行数据备份&#xff0c;防止数据字段重复覆盖等情况发生。 源码截图 源码下载 …

python实训day1

1、 dd2 dict(id101, name小明, age23, score[90, 67, 98]) print(dd2) print() print(dd2.id ->, dd2.get(id)) # 101 print(dd2.age ->, dd2.get(age)) # 23 print() """字典数据由三部分组成&#xff1a;1、键集2、值集&#xff1b;3、元素集&…

三种方式实现人车流统计(yolov5+opencv+deepsort+bytetrack+iou)

一、运行环境 1、项目运行环境如下 2、CPU配置 3、GPU配置 如果没有GPU yolov5目标检测时间会比较久 二、编程语言与使用库版本 项目编程语言使用c++,使用的第三方库,onnxruntime-linux-x64-1.12.1,opencv-4.6.0 opencv 官方地址Releases - OpenCV opencv github地址ht…

使用Redis优化Java应用的性能

使用Redis优化Java应用的性能 大家好&#xff0c;我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编&#xff0c;也是冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01;今天我们来探讨如何使用Redis优化Java应用的性能。Redis是一种开源的内存数据结构…

【面试】http

一、定义 HTTP&#xff08;超文本传输协议&#xff09;&#xff0c;是一种用于分布式、协作式、超媒体信息系统的应用层协议&#xff0c;它是万维网数据通信的基础。主要特点是无状态&#xff08;服务器不会保存之前请求的状态&#xff09;、无连接&#xff08;服务器处理完请…

探索 C# 中的 LINQ:语法和类型

LINQ&#xff08;语言集成查询&#xff09;是 C# 中引入的一项功能&#xff0c;它提供了一种统一的方式来查询来自不同类型数据源&#xff08;如集合、数组、XML、数据库等&#xff09;的数据。LINQ 允许开发人员直接在 C# 代码中编写查询&#xff0c;从而更轻松地操作和转换数…

http发展史(http0.9、http1.0、http1.1、http/2、http/3)详解

文章目录 HTTP/0.9HTTP/1.0HTTP/1.1队头阻塞&#xff08;Head-of-Line Blocking&#xff09;1. TCP 层的队头阻塞2. HTTP/1.1 的队头阻塞 HTTP/2HTTP/3 HTTP/0.9 发布时间&#xff1a;1991年 特点&#xff1a; 只支持 GET 方法没有 HTTP 头部响应中只有 HTML 内容&#xff0…

七、yolov8图像标注和模型训练(目标检测)

环境配置方法&#xff1a;点这里 环境配置完毕后&#xff0c;需要进行标注工作和训练任务&#xff0c;以下分两个部分进行。 图片标注 1、按照以下的格式&#xff0c;将图片放入images中。&#xff08;不限制文件夹路径&#xff09; 2、然后下载labelme标注工具&#xff0…

循环赛日程表

描述 n 2 ^ k个选手 每个选手必须与其他n-1个选手各赛一次每个选手一天赛一次比赛打n-1天 思路 k 3时的解 我们先进行假设&#xff1a;每个选手第一天和自己比&#xff0c;然后分解成4个子问题&#xff1a; (1)14号的第14天&#xff0c;对手1~4号; (2)14号的第58天&a…

VS编译器字体颜色设置

默认颜色不好看&#xff0c;颜色之间代码各个关系之间没有很强关联性所以要设置字体颜色 颜色一步到位版本&#xff1a; 第一步&#xff1a; 第二步&#xff1a; 第三步&#xff1a;One dark Pro 第四步&#xff1a; 等待安装完后重启VS 点击Modify&#xff0c;一段时间结束后选…

IDEA 学习之 打开一个 MAVEN 工程

目录 1. 单体工程2. 多 module 工程3. 多个多 module 工程3.1. 重复 1 步骤3.2. 添加其他多 module 工程 1. 单体工程 2. 多 module 工程 3. 多个多 module 工程 3.1. 重复 1 步骤 3.2. 添加其他多 module 工程

django学习入门系列之第三点《CSS基础样式介绍2》

文章目录 文字对齐方式外边距内边距往期回顾 文字对齐方式 水平对齐方式 text-align: center;垂直对齐方式 /* 注意&#xff0c;这个只能是一行来居中 */ line-height:/*长度*/ ;样例 <!DOCTYPE html> <html lang"en"> <head><meta charset…

docker 环境部署

1.Redis部署 用docker拉取redis镜像 docker pull redis 用docker查看拉取的镜像版本号&#xff0c;这里查到的是 6.2.6 版本 docker inspect redis 通过wget指令下载对应版本的tar包&#xff0c;下载完成后解压 wget https://download.redis.io/releases/redis-6.2.6.tar.gz …

【2023年全国青少年信息素养大赛智能算法挑战赛复赛真题卷】

目录 2023全国青少年信息素养大赛智能算法挑战赛初中组复赛真题 2023全国⻘少年信息素养⼤赛智能算法挑战复赛⼩学组真题 2023全国青少年信息素养大赛智能算法挑战赛初中组复赛真题 1. 修复机器人的对话词库错误 【题目描述】 基于人工智能技术的智能陪伴机器人的语言词库被…