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

Day 63 || 拓扑排序、dijkstra

拓扑排序

题目链接:卡码网:117. 软件构建

思路:具体内容参考“代码随想录——拓扑排序精讲”。就是先找到入度为0的点,记录,然后找到该点出度指向的点,对该点的入度减一,如果为0入栈不为0的话继续,直至栈为空。查看结果数量和输入的点数量是否一致,不一致返回-1。

import java.util.*;public class Main {public static void main(String[] args) {Scanner sc = new Scanner(System.in);int nums = sc.nextInt(); // 节点数int roads = sc.nextInt(); // 边数int[] in = new int[nums]; // 入度数组HashMap<Integer, List<Integer>> map = new HashMap<>(); // 邻接表表示出度关系// 读取边信息,构建图for (int i = 0; i < roads; i++) {int l = sc.nextInt();int r = sc.nextInt();// 增加入度in[r] += 1;// 初始化并添加出度列表map.putIfAbsent(l, new ArrayList<>());map.get(l).add(r);}// 存储拓扑排序结果StringBuilder res = new StringBuilder();// 拓扑排序:使用队列存储入度为0的节点Queue<Integer> queue = new LinkedList<>();for (int i = 0; i < nums; i++) {if (in[i] == 0) {queue.add(i);}}int count = 0; // 计数处理过的节点数while (!queue.isEmpty()) {int cur = queue.poll();res.append(cur).append(" ");count++;// 遍历当前节点的所有邻接节点,将其入度减1if (map.containsKey(cur)) {for (int neighbor : map.get(cur)) {in[neighbor]--;// 如果入度为0,加入队列if (in[neighbor] == 0) {queue.add(neighbor);}}}}// 检查是否所有节点都被处理了,如果有环,无法拓扑排序if (count != nums) {System.out.println(-1);} else {res.deleteCharAt(res.length() - 1); // 删除最后一个空格System.out.println(res.toString());}}
}

dijkstra

题目链接:卡码网:47. 参加科学大会

思路:具体内容参考“代码随想录——dijkstra(朴素版)精讲”。dijkstra三部曲:第一步,选源点到哪个节点近且该节点未被访问过;第二步,该最近节点被标记访问过;第三步,更新非访问节点到源点的距离(即更新minDist数组)。类似于prim算法,但是这个列表中存储的是到源点最近的距离,而非节点到最小生成树的最小距离。


http://www.mrgr.cn/news/71952.html

相关文章:

  • 第三十三篇——用变化的眼光看最大值和最小值
  • Qt 监控USB设备的插入和移除
  • 从0开始学习机器学习--Day24--核函数
  • 小面馆叫号取餐流程 佳易王面馆米线店点餐叫号管理系统操作教程
  • 数据中台解决方案
  • 搜索引擎的演变与未来发展趋势分析
  • 最新版【H5商城直接部署】
  • npm list -g --depth=0(用来列出全局安装的所有 npm 软件包而不显示它们的依赖项)
  • Javascript高级—DOM树的深度遍历和广度遍历
  • PyQt入门指南五十四 依赖管理与打包发布
  • Android Framework AMS(14)ContentProvider分析-1(CP组件应用及开机启动注册流程解读)
  • 深入FastAPI:路径参数、查询参数及其检校
  • 计算机毕业设计Hadoop+Spark高考推荐系统 高考分数线预测 知识图谱 高考数据分析可视化 高考大数据 大数据毕业设计 Hadoop 深度学习
  • 元宇宙及其技术
  • Flink CDC(SQL Client)连接 MySQL 数据库教程
  • 数据结构中的抽象数据类型、逻辑结构、存储结构等到底是什么?
  • Linux学习笔记之shell快速入门及相关变量
  • PYNQ 框架 - 中断(INTR)驱动
  • 阿里巴巴通义灵码推出Lingma SWE-GPT:开源模型的性能新标杆
  • 音视频入门基础:MPEG2-TS专题(4)——使用工具分析MPEG2-TS传输流
  • JavaScript案例-轮播图
  • LeetCode【0019】删除链表的倒数第N个结点
  • 论文3—《基于YOLOv5s的农田垃圾轻量化检测方法》文献阅读分析报告
  • 我是如何一步步学习深度学习模型PyThorch
  • 信息收集系列(二):ASN分析及域名收集
  • LLM - 使用 LLaMA-Factory 微调大模型 Qwen2-VL SFT(LoRA) 图像数据集 教程 (2)