当前位置: 首页 > article >正文

day54 代码随想录算法训练营 图论专题8

1 今日打卡拓扑排序 117. 软件构建dijkstra朴素版 47. 参加科学大会第六期模拟笔试2 拓扑排序2.1 思路构建图 统计入度用邻接表umap存储每个节点的后继节点比如 S 的后继是 T。用数组inDegree统计每个节点的入度指向该节点的边数即该节点依赖的文件数。初始化队列将所有入度为 0 的节点无依赖的文件加入队列。处理队列取出队列中的节点处理该文件加入结果列表。遍历该节点的所有后继节点被该文件依赖的文件将它们的入度减 1因为依赖的文件已处理。如果某个后继节点入度变为 0所有依赖都已处理加入队列。结果判断如果结果列表的长度等于节点数N无环输出顺序。否则存在环相互依赖输出 - 1。2.2 实现代码import java.util.*; public class Main{ public static void main(String[] args) { Scanner sc new Scanner(System.in); int n sc.nextInt(), m sc.nextInt(); // n文件数m依赖关系数 // 1. 初始化邻接表存储图每个节点对应一个列表存后继节点 ListListInteger umap new ArrayList(); for(int i 0; i n; i) { umap.add(new ArrayList()); } // 2. 初始化入度数组统计每个节点的入度依赖数 int[] inDegree new int[n]; for(int i 0; i m; i) { int start sc.nextInt(), end sc.nextInt(); // S→TT依赖S umap.get(start).add(end); // 邻接表添加边start的后继是end inDegree[end]; // end的入度1多了一个依赖 } // 3. 初始化队列入度为0的节点无依赖的文件入队 QueueInteger que new LinkedList(); ListInteger res new ArrayList(); // 存储拓扑排序结果 for(int i 0; i n; i) { if(inDegree[i] 0) { que.add(i); } } // 4. 处理队列逐步消除入度为0的节点 while(!que.isEmpty()) { int cur que.poll(); // 取出当前处理的节点 res.add(cur); // 加入结果列表 // 遍历当前节点的所有后继节点 ListInteger temp umap.get(cur); for(int node : temp) { inDegree[node]--; // 后继节点的入度减1依赖减少一个 if(inDegree[node] 0) { // 所有依赖都处理完了 que.add(node); // 入队等待处理 } } } // 5. 判断结果是否所有节点都处理了无环 if(res.size() n) { // 输出顺序空格分隔 for(int i 0; i n - 1; i) { System.out.print(res.get(i) ); } System.out.println(res.get(n - 1)); }else{ System.out.println(-1); // 有环输出-1 } } }3 dijkstra朴素版3.1 思路初始化记录起点到所有节点的初始最短距离起点到自己为 0到其他节点为 “无穷大”。记录节点是否已确定最短路径避免重复处理。贪心选择每次从未确定最短路径的节点中选当前距离起点最近的节点局部最优。松弛操作通过这个选中的节点更新其邻接节点的最短距离尝试缩短路径。重复直到所有节点的最短路径都被确定或找到终点的最短路径。3.2 实现代码import java.util.*; public class Main{ public static void main(String[] args) { Scanner sc new Scanner(System.in); // 1. 输入基础参数n节点数m边数 int n sc.nextInt(), m sc.nextInt(); // 2. 初始化邻接矩阵存储图的边和权重 // 邻接矩阵adjacencyMatrix[i][j] 表示i到j的边的权重无穷大表示无直接边 int[][] adjacencyMatrix new int[n1][n1]; for(int i 0; i n; i) { // 初始化为无穷大Integer.MAX_VALUE表示初始时所有节点间无直接边 Arrays.fill(adjacencyMatrix[i], Integer.MAX_VALUE); } // 3. 填充邻接矩阵输入m条边 for(int i 0; i m; i) { int from sc.nextInt(), to sc.nextInt(); // 边的起点、终点 int weight sc.nextInt(); // 边的权重距离/成本 adjacencyMatrix[from][to] weight; // 记录from→to的权重 } // 4. 初始化最短距离数组和访问标记数组 int[] minDist new int[n 1]; // minDist[i]起点(1)到i的最短距离 Arrays.fill(minDist, Integer.MAX_VALUE); // 初始都是无穷大不可达 boolean[] visited new boolean[n 1]; // visited[i]i的最短路径是否已确定 // 5. 起点初始化起点1到自己的距离为0 int start 1, end n; minDist[start] 0; // 6. 核心迪杰斯特拉主循环遍历n次确定n个节点的最短路径 for(int i 1; i n; i) { // 6.1 贪心选择找未访问的、距离起点最近的节点cur int minVal Integer.MAX_VALUE; // 临时存储当前最小距离 int cur 1; // 临时存储选中的节点 for(int j 1; j n; j) { // 条件未访问 距离起点的距离更小 if(!visited[j] minDist[j] minVal) { minVal minDist[j]; cur j; } } // 6.2 标记cur的最短路径已确定后续不再处理 visited[cur] true; // 6.3 松弛操作通过cur更新其邻接节点的最短距离 for(int j 1; j n; j) { // 条件 // 1. j未访问最短路径未确定 // 2. cur到j有直接边不是无穷大 // 3. 起点→cur→j的路径 比 起点→j的当前最短路径 更短 if(!visited[j] adjacencyMatrix[cur][j] ! Integer.MAX_VALUE adjacencyMatrix[cur][j] minDist[cur] minDist[j]) { // 更新最短距离松弛 minDist[j] adjacencyMatrix[cur][j] minDist[cur]; } } } // 7. 输出结果判断终点是否可达 if(minDist[n] Integer.MAX_VALUE) { System.out.println(-1); // 不可达输出-1 }else{ System.out.println(minDist[end]); // 输出起点1到终点n的最短距离 } sc.close(); } }

相关文章:

day54 代码随想录算法训练营 图论专题8

1 今日打卡 拓扑排序 117. 软件构建 dijkstra朴素版 47. 参加科学大会(第六期模拟笔试) 2 拓扑排序 2.1 思路 构建图 统计入度: 用邻接表(umap)存储每个节点的后继节点(比如 S 的后继是 T&#xff09…...

draw画图

flowchart TD%% 定义样式类 (深色主题)classDef darkNode fill:#2d2d2d,stroke:#ffffff,stroke-width:1px,color:#ffffff,rx:5,ry:5;classDef layerBox fill:#1a1a1a,stroke:#ffffff,stroke-width:1px,stroke-dasharray: 5 5,color:#cccccc;%% 1. 客户端层subgraph ClientLayer…...

百川2-13B-Chat WebUI保姆级教程:check.sh脚本输出解读+各状态符号含义说明

百川2-13B-Chat WebUI保姆级教程:check.sh脚本输出解读各状态符号含义说明 1. 项目简介:你的专属AI对话助手 如果你刚接触百川2-13B-Chat WebUI,可能会觉得有点复杂。别担心,这篇文章就是为你准备的。我会用最直白的方式&#x…...

科哥二次开发!cv_unet_image-matting抠图工具:保姆级使用指南

科哥二次开发!cv_unet_image-matting抠图工具:保姆级使用指南 1. 工具介绍与快速上手 1.1 什么是cv_unet_image-matting cv_unet_image-matting是一款基于U-Net架构的智能抠图工具,经过开发者"科哥"的二次开发,提供了…...

告别重复操作:用快马平台ai生成comfyui高效工作流模块代码

最近在折腾ComfyUI,发现搭建复杂工作流时,最耗时的不是创意构思,而是那些重复性的节点配置和连线。比如每次都要手动拖拽加载模型、设置提示词编码、配置采样器参数,步骤繁琐且容易出错。为了提高效率,我尝试用Python写…...

AI学习机:从噱头到因材施教之路

自2025年生成式AI技术爆发,学习机行业变革深刻。当下大量AI学习机有名无实,而华强北产品崭露头角。市场层级分化,技术路径多样,但也存在“伪智能”问题,真正的个性化学习亟待实现。华强北AI学习机崭露头角2025年生成式…...

Ant + WebLogic 环境下的 JDK8 → JDK17 迁移调查

Ant WebLogic 环境下的 JDK8 → JDK17 迁移调查 使用 jdeps / jdeprscan 进行依赖关系分析的实践记录1. 整理调查对象 本次处理的是日本业务系统中常见的以下构成: Java EE 系统Ant 构建WebLogic Server 12c(对应 JDK8)Eclipse 开发环境无依…...

C# WPF上位机开发:FreeSql+MVVM实战避坑指南(含MySQL/SQLServer双数据库配置)

C# WPF上位机开发:FreeSqlMVVM实战避坑指南(含MySQL/SQLServer双数据库配置) 从Java转型到C# WPF开发的工程师们,往往会在MVVM架构下遇到数据库集成的各种"坑"。本文将分享如何用FreeSql这一轻量级ORM框架,在…...

松材线虫病检测仪 松材线虫快速检测系统

松材线虫病检测仪之所以能实现超高精准度,核心依托行业领先的实时荧光定量PCR分子检测技术,从分子层面锁定病害痕迹,彻底杜绝经验判断带来的误差,这也是其灵敏度远超传统检测设备的核心原因。设备通过专业流程提取松木样本中的遗传…...

Fish-Speech-1.5镜像:基于Xinference部署,稳定高效的TTS服务

Fish-Speech-1.5镜像:基于Xinference部署,稳定高效的TTS服务 想不想拥有一个能说12种语言、声音自然流畅的AI语音助手?无论是给视频配音、制作有声书,还是开发智能客服,高质量的语音合成都是关键。今天,我…...

电池充电放电控制的Matlab/Simulink仿真模型搭建

电池充电放电控制 Matlab/simulink仿真搭建模型: 介绍:该模型介绍了在案例研究中实现的电池充电/放电控制,该案例研究涉及直流总线 (恒定电压)、电池、公共负载和双向双开关降压-开压 DC-DC 转换器。 电池充 电和放电的…...

如何通过microG实现Android自由生态:终极解决方案完全指南

如何通过microG实现Android自由生态:终极解决方案完全指南 【免费下载链接】GmsCore Free implementation of Play Services 项目地址: https://gitcode.com/GitHub_Trending/gm/GmsCore 在当今Android生态中,设备制造商与Google服务的深度绑定常…...

通义千问3-Reranker-0.6B效果实测:中英文混合文本排序案例分享

通义千问3-Reranker-0.6B效果实测:中英文混合文本排序案例分享 你是否遇到过这样的烦恼:在一个文档库里搜索“如何配置TensorFlow GPU内存”,结果返回的文档里既有英文技术说明,也有中文的模型可视化教程,甚至还有完全…...

Chatwoot开源客服系统Docker部署全攻略:从零搭建到邮件配置

Chatwoot开源客服系统Docker部署实战:从零搭建到邮件服务集成 在当今数字化客户服务领域,开源解决方案正成为企业降本增效的重要选择。Chatwoot作为一款现代化的开源客服平台,以其多渠道集成、自动化工作流和实时分析功能脱颖而出。本文将带您…...

Windows平台最全ico制作指南:从icofx3安装到多尺寸图标导出

Windows平台ICO图标制作全流程指南:从工具选择到专业输出 在Windows生态中,图标(ICO)作为软件视觉识别的第一触点,直接影响用户对产品的第一印象。一个专业的开发者不仅需要关注代码质量,更要掌握图标制作的核心技能。本文将带您深…...

图像篡改检测技术详解(下篇)--文本与金融图像篡改检测

在图像篡改检测技术系列分享的上篇中,我们梳理了通用检测算法的技术脉络。然而,当这些算法从自然场景迁移到金融文档图像时,性能往往急剧下降——这不是算法本身的失败,而是场景迁移带来的“维度之困”。通用算法在金融场景中的局…...

多线程优化:DamoFD-0.5G高并发推理的性能调优实践

多线程优化:DamoFD-0.5G高并发推理的性能调优实践 1. 引言 在实际的人脸检测应用场景中,我们经常需要同时处理大量的图片请求。比如一个智能相册应用,用户上传几百张照片后,系统需要在短时间内完成所有人脸的检测和关键点定位。…...

Java高频面试题(十一):SpringCloud微服务核心技术全解析

Spring Cloud技术框架(动态路由、灰度发布、流量控制、熔断降级、链路追踪等)微服务概念每一个微服务的开发其实跟我们Spring boot的单体项目开发是一样的,只是开发的时候,我们就需要考虑,单体的项目多了,我们如何来管控&#xff…...

【科研人聊方法】断点回归:用“自然实验”搞定因果推断

本期嘉宾:老章(某985高校应用经济学博士,用Stata做断点回归研究3年,发表CSSCI论文5篇) 主持人:小研(科研人小助手)小研:老章您好,很多刚接触实证研究的同学对…...

手把手教你用国内镜像源安装Selenium(避坑指南+完整流程)

国内开发者高效安装Selenium全攻略:镜像源配置与避坑实践 每次在Python项目中引入Selenium时,你是否也遇到过因网络问题导致的安装失败?作为国内开发者,直接通过官方源安装Python包往往速度缓慢甚至无法完成。本文将带你彻底解决这…...

土豆矮砧密植水肥一体化系统:从安装到高产的实操手册

导读你是否还在为土豆种植费工、产量低发愁?传统大水漫灌既浪费水又烧苗,人工施肥不均还累人。现在有一种“懒人种植法”——矮砧密植(Dwarf rootstock dense planting) 搭配水肥一体化(Fertigation)&#…...

Stata门槛模型实操指南:从原理到论文应用

作为一个用Stata做面板数据研究快4年的“老玩家”,我必须说门槛模型是我工具箱里的“宝藏工具”——它完美解决了传统线性回归模型忽略“结构突变”的痛点,比如“当经济发展水平达到某个阈值后,产业结构对经济增长的影响会发生显著变化”。今…...

智能充电管理系统(有完整资料)

资料查找方式:特纳斯电子(电子校园网):搜索下面编号即可编号:T0892204C设计简介:本设计是基于单片机的智能充电管理系统,主要实现以下功能:1.通过按键来切换显示电压电流与电池电量预…...

YOLOv10赋能工业质检:快速识别微小缺陷的落地案例

YOLOv10赋能工业质检:快速识别微小缺陷的落地案例 1. 工业质检的挑战与机遇 在制造业数字化转型浪潮中,产品质量检测一直是自动化改造的难点。传统人工质检面临三大痛点: 效率瓶颈:熟练工人每分钟最多检测20-30个零件&#xff…...

NotaGen保姆级教程:无需乐理知识,快速生成肖邦风格钢琴曲

NotaGen保姆级教程:无需乐理知识,快速生成肖邦风格钢琴曲 你是不是也曾幻想过,自己也能像肖邦那样,坐在钢琴前即兴创作出优美的旋律?但一想到复杂的乐理知识、和声学、曲式结构,就望而却步了。现在&#x…...

CiteSpace关键词聚类图谱实战解析:从数据预处理到可视化解读

CiteSpace关键词聚类图谱实战解析:从数据预处理到可视化解读 作为一名经常和文献数据打交道的科研人员,我深知在浩如烟海的学术文献中快速把握一个领域的研究脉络是多么重要。CiteSpace作为一款强大的文献计量与可视化工具,其关键词聚类图谱功…...

ProxmoxVE Helper-Scripts 实战指南:高效管理家庭实验室的自动化解决方案

ProxmoxVE Helper-Scripts 实战指南:高效管理家庭实验室的自动化解决方案 【免费下载链接】ProxmoxVE Proxmox VE Helper-Scripts (Community Edition) 项目地址: https://gitcode.com/gh_mirrors/prox/ProxmoxVE 一、核心功能解析:从脚本架构到…...

嵌入式硬件工程师如何从菜鸟到专家?5年实战经验分享

嵌入式硬件工程师如何从菜鸟到专家?5年实战经验分享 刚入行时,我连示波器的触发模式都调不准,现在却能独立设计工业级嵌入式系统。这五年踩过的坑、熬过的夜、烧坏的芯片,都成了最宝贵的经验。如果你也处在职业迷茫期,…...

MMPose编解码器深度对比:Heatmap/SimCC/RLE三种方案在COCO数据集上的性能实测

MMPose编解码器性能实测:Heatmap/SimCC/RLE在COCO数据集上的全面对比 当开发者面临姿态估计算法选型时,编解码器的选择往往成为影响模型性能的关键因素。本文基于MMPose框架,在相同硬件条件下对Heatmap、SimCC和RLE三种主流编解码方案进行系统…...

传统问卷“手绘蓝图”VS书匠策AI“智能织网”:解锁科研新速度

在科研的浩瀚宇宙中,问卷设计如同搭建一座通往数据星辰的桥梁,既需要精准的规划,又离不开高效的执行。昔日,研究者们手持“手绘蓝图”,一笔一划勾勒出问卷的轮廓;而今,书匠策AI科研工具以其智能…...