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

【代码随想录Day55】图论Part07

prim 算法精讲

题目链接/文章讲解:代码随想录

import java.util.*;public class Main {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);// 读取顶点数和边数int vertexCount = scanner.nextInt();int edgeCount = scanner.nextInt();// 初始化邻接矩阵,所有值初始化为一个大值,表示无穷大int[][] adjacencyMatrix = new int[vertexCount + 1][vertexCount + 1];for (int i = 0; i <= vertexCount; i++) {Arrays.fill(adjacencyMatrix[i], Integer.MAX_VALUE);}// 读取边的信息并填充邻接矩阵for (int i = 0; i < edgeCount; i++) {int startVertex = scanner.nextInt();int endVertex = scanner.nextInt();int weight = scanner.nextInt();adjacencyMatrix[startVertex][endVertex] = weight;adjacencyMatrix[endVertex][startVertex] = weight; // 无向图}// 距离数组,记录每个节点到生成树的最小距离int[] minimumDistances = new int[vertexCount + 1];Arrays.fill(minimumDistances, Integer.MAX_VALUE);// 记录节点是否在生成树中boolean[] isInMST = new boolean[vertexCount + 1];// Prim算法主循环minimumDistances[1] = 0; // 从第一个节点开始for (int i = 1; i < vertexCount; i++) {int closestVertex = -1;int smallestDistance = Integer.MAX_VALUE;// 选择距离生成树最近的节点for (int j = 1; j <= vertexCount; j++) {if (!isInMST[j] && minimumDistances[j] < smallestDistance) {smallestDistance = minimumDistances[j];closestVertex = j;}}// 将最近的节点加入生成树isInMST[closestVertex] = true;// 更新非生成树节点到生成树的距离for (int j = 1; j <= vertexCount; j++) {if (!isInMST[j] && adjacencyMatrix[closestVertex][j] < minimumDistances[j]) {minimumDistances[j] = adjacencyMatrix[closestVertex][j];}}}// 统计生成树的总权重int totalWeight = 0;for (int i = 2; i <= vertexCount; i++) {totalWeight += minimumDistances[i];}// 输出结果System.out.println(totalWeight);scanner.close();}
}

kruskal 算法精讲

题目链接/文章讲解:代码随想录

import java.util.*;class Edge {int vertex1, vertex2, weight;// Edge构造函数,初始化边的两个顶点和权重Edge(int vertex1, int vertex2, int weight) {this.vertex1 = vertex1;this.vertex2 = vertex2;this.weight = weight;}
}public class Main {private static final int MAX_NODES = 10001; // 最大节点数private static int[] parent = new int[MAX_NODES]; // 存储每个节点的父节点// 初始化并查集public static void initializeUnionFind() {for (int i = 0; i < MAX_NODES; i++) {parent[i] = i; // 每个节点的父节点初始化为自身}}// 查找操作,寻找节点的根节点public static int find(int node) {if (node == parent[node]) {return node; // 如果节点是根节点,直接返回}// 路径压缩,优化查找效率return parent[node] = find(parent[node]);}// 合并两个集合public static void union(int node1, int node2) {int root1 = find(node1);int root2 = find(node2);if (root1 != root2) {parent[root2] = root1; // 将一个集合的根节点指向另一个集合的根节点}}public static void main(String[] args) {Scanner scanner = new Scanner(System.in);int vertexCount = scanner.nextInt(); // 顶点数量int edgeCount = scanner.nextInt(); // 边的数量List<Edge> edgeList = new ArrayList<>(); // 存储所有边int totalWeight = 0; // 最小生成树的权重总和// 读取边的信息for (int i = 0; i < edgeCount; i++) {int vertex1 = scanner.nextInt();int vertex2 = scanner.nextInt();int weight = scanner.nextInt();edgeList.add(new Edge(vertex1, vertex2, weight)); // 添加边到边列表}// 按照边的权重进行排序edgeList.sort(Comparator.comparingInt(edge -> edge.weight));// 初始化并查集initializeUnionFind();// 遍历所有边,执行Kruskal算法for (Edge edge : edgeList) {int root1 = find(edge.vertex1);int root2 = find(edge.vertex2);// 如果两个顶点的根节点不同,说明它们不在同一个集合if (root1 != root2) {totalWeight += edge.weight; // 加入当前边的权重union(root1, root2); // 合并两个集合}}// 输出最小生成树的权重总和System.out.println(totalWeight);scanner.close(); // 关闭扫描器}
}

相关文章:

【代码随想录Day55】图论Part07

prim 算法精讲 题目链接/文章讲解&#xff1a;代码随想录 import java.util.*;public class Main {public static void main(String[] args) {Scanner scanner new Scanner(System.in);// 读取顶点数和边数int vertexCount scanner.nextInt();int edgeCount scanner.nextI…...

软考在即!这些注意事项你提前了解!

11月软考马上就要开始了&#xff0c;但是&#xff0c;还有很多的考生&#xff0c;可能还不知道自己到底应该去了解些什么&#xff1f;本文将详细介绍机考注意事项及系统操作提示&#xff0c;帮助考生们备考无忧。 一、考试入场要求和考场规则 1、入场时间&#xff1a;考生需提…...

CMake知识点

参考&#xff1a; https://zhuanlan.zhihu.com/p/661284252 cmake使用教程&#xff08;实操版&#xff09;-CSDN博客 【CMake】CMake从入门到实战系列&#xff08;二&#xff09;——实例入手&#xff0c;讲解CMake的基本流程_cmake创建一个可执行目标的过程-CSDN博客 一、…...

git ls-remote

文章目录 1.简介2.格式3.选项4.示例5.小结参考文献 1.简介 git ls-remote 是一个 Git 命令&#xff0c;用于列出远程 Git 仓库的引用&#xff08;refs&#xff09;&#xff0c;包括分支、标签等。 这个命令非常有用&#xff0c;可以帮助你查看远程仓库中可用的分支和标签&…...

低代码平台如何通过AI赋能,实现更智能的业务自动化?

引言 随着数字化转型的加速推进&#xff0c;企业在日常运营中面临的业务复杂性与日俱增。如何快速响应市场需求&#xff0c;优化流程&#xff0c;并降低开发成本&#xff0c;成为各行业共同关注的核心问题。低代码平台作为一种能够快速构建应用程序的工具&#xff0c;因其可视化…...

计算疫情扩散时间

该专栏题目包含两部分&#xff1a; 100 分值部分题目 200 分值部分题目 所有题目都会陆续更新&#xff0c;订阅防丢失 题目描述 在一个地图中(地图由 N ∗ N N*N N∗N 个区域组成)&#xff0c;有部分区域被感染病菌。 感染区域每天都会把周围(上下左右)的4个区域感染。 请…...

【Windows11】24H2 内存占用高(截至10月31日)

文章目录 一、问题二、解决三、原因 一、问题 系统版本&#xff1a; 内存只有32GB。 以前只有我在运行数据处理程序的时候内存占用才会很高&#xff0c;日常情况下应该只有40%、50%左右的。 但是24H2&#xff0c;日常情况下内存占用80%以上。 而我只开了很少的应用&#…...

题目:多个字符从两端移动,向中间汇聚

【多个字符从两端移动&#xff0c;向中间汇聚】 char arr1[] "Good Good Study,Day Day Up!" ; char arr2[] "***************************"; 【思路】 首先两字符串中的元素个数要相同&#xff0c;将两串字符分别存放在数组中&#xff0c;那么字符串中…...

前端如何安全存储密钥,防止信息泄露

场景 把公钥硬编码在前端代码文件里&#xff0c;被公司安全检测到了要整改&#xff0c;于是整理几种常见的前端密钥存储方案。 1. 设置环境变量再读取 在打包或部署前端应用时&#xff0c;可以将密钥配置为环境变量&#xff0c;在应用运行时通过环境变量读取密钥。这样可以将密…...

银行电子户分账解决电商行业哪些问题

随着电子商务的快速发展&#xff0c;电商银行电子户分账作为金融科技领域的重要一环&#xff0c;逐渐成为现代金融业务的核心。本文将详细探讨电商银行电子户分账的原理、操作流程、安全措施以及在电子商务中的重要作用。 二、电商银行电子户分账的基本概念 电商银行电子户分…...

Web音乐库:SpringBoot实现的音乐网站

2相关技术 2.1 MYSQL数据库 MySQL是一个真正的多用户、多线程SQL数据库服务器。 是基于SQL的客户/服务器模式的关系数据库管理系统&#xff0c;它的有点有有功能强大、使用简单、管理方便、安全可靠性高、运行速度快、多线程、跨平台性、完全网络化、稳定性等&#xff0c;非常…...

Rust: 加密算法库 ring 如何用于 RSA 数字签名?

本来用 rsa 库基本搞定&#xff0c;但文心一言建议改用 ring 库。原因是 rsa 库已经放弃维护&#xff0c;而 ring 库性能公认很好。但是如何进行 RSA 数字签名&#xff0c;网上几乎查不到这方面材料。仔细查看了 ring 库的源代码和代码注释&#xff0c;终于完成趟坑。总结一下供…...

Matplotlib 网格线

Matplotlib 网格线 Matplotlib 是一个强大的 Python 绘图库&#xff0c;广泛用于数据可视化。在 Matplotlib 中&#xff0c;网格线是一种常用的辅助工具&#xff0c;用于增强图表的可读性和美观性。本文将详细介绍如何在 Matplotlib 中添加和使用网格线。 1. 简介 网格线是在…...

钉钉机器人禅道消息通知@指派人

钉钉、禅道怎么设置webhook&#xff1f; 点击查看&#xff1a;获取自定义机器人 Webhook 地址 在禅道上配置钉钉机器人webhook&#xff0c;使用管理员账号登录&#xff0c;找到通知设置 添加webhook 添加webhook所需要的数据即可 webhook设置&#xff0c;根据自己的实际…...

我的新书出版啦!和大家聊聊写书的酸甜苦辣

我的新书出版啦&#xff01;小伙伴们问是不是赚翻了&#xff1f; 大家好&#xff0c;我是码哥。我的新书《Redis 高手心法》出版后&#xff08;2024 年 8 月份出版&#xff09;&#xff0c;有一些小伙伴问了我一些问题&#xff1a; 写书是不是赚了很多钱&#xff1f;我也想写…...

【福建医科大学附属第一医院-注册安全分析报告】

前言 由于网站注册入口容易被黑客攻击&#xff0c;存在如下安全问题&#xff1a; 暴力破解密码&#xff0c;造成用户信息泄露短信盗刷的安全问题&#xff0c;影响业务及导致用户投诉带来经济损失&#xff0c;尤其是后付费客户&#xff0c;风险巨大&#xff0c;造成亏损无底洞 …...

第二届新生程序设计竞赛热身赛(C语言)

A:饥饿的XP XP迷失在X星球&#xff0c;他醒来时已经很久很久很久没有吃过东西了。他突然发现身边有一张地图&#xff0c;上面有X星球上每一个食物供给点的位置。太好了&#xff0c;XP跳了起来。他决定先把肚子填饱再去寻找其他伙伴。现在已知XP的位置(X, Y)&#xff0c;以及他的…...

WebSocket和HTTP请求的区别

1. 连接方式 HTTP请求&#xff1a;基于“请求-响应”模式。每次通信都要重新建立连接&#xff0c;客户端发送请求后服务器返回响应&#xff0c;连接就断开了。这种模式通常适合不频繁更新的数据&#xff0c;如静态页面的加载。WebSocket&#xff1a;支持长连接&#xff0c;连接…...

【Python · Pytorch】人工神经网络 ANN(中)

【Python Pytorch】人工神经网络 ANN&#xff08;中&#xff09; 6. 反向传播6.1 梯度下降法6.1.1 线搜索方法6.1.2 微分 & 导数6.1.3 偏导数6.1.4 Jacobian矩阵6.1.5 梯度 & 梯度下降法按维度介绍 6.1.6 面临挑战平原现象 & 振荡现象局部最小值鞍点梯度消失梯度爆…...

穷举vs暴搜vs深搜vs回溯vs剪枝 算法专题

一. 全排列 全排列 class Solution {List<List<Integer>> ret;List<Integer> path;boolean[] check;public List<List<Integer>> permute(int[] nums) {ret new ArrayList<>();//存放结果path new ArrayList<>();存放每个路径的…...

Docker Compose 镜像检测脚本(支持自动扫描 + 手动输入 YAML)

在日常运维中&#xff0c;经常会遇到这样一个问题&#xff1a; docker-compose 文件里定义了很多镜像&#xff0c;但本地是否已经存在不清楚 如果一个个 docker pull 或 docker images 去对比&#xff0c;会非常低效。 因此我们可以写一个脚本&#xff0c;自动解析 docker-com…...

中国地址生成器:快速生成真实地址数据的开发者利器

中国地址生成器&#xff1a;快速生成真实地址数据的开发者利器 【免费下载链接】chinese-address-generator 中国地址生成器 - 三级地址 四级地址 随机生成完整地址 项目地址: https://gitcode.com/gh_mirrors/ch/chinese-address-generator 在开发测试、数据填充、表单…...

2026金铲铲之战电脑版模拟器实测:选对模拟器轻松上分

一、实测前提说明作为拥有三年游玩经验的金铲铲之战老弈士&#xff0c;从手机端切换到电脑端游玩后&#xff0c;大屏在阵容运营、棋子对位、选秀博弈上的优势十分突出&#xff1a;手机小屏不仅看不清棋子星级、装备细节&#xff0c;频繁触屏操作还容易误触卖错棋子、放错站位&a…...

长期使用Taotoken的Token Plan套餐在项目开发成本控制上的实际感受

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 长期使用Taotoken的Token Plan套餐在项目开发成本控制上的实际感受 1. 从按需付费到计划用量的转变 在AI应用开发的早期阶段&…...

Claude Code 多项目 API 配置管理实践

背景 Claude Code 的项目级配置文件 .claude/settings.json 中包含 API 提供商相关的环境变量。当同时维护多个项目&#xff0c;每个项目使用不同的 API 提供商&#xff08;Anthropic 直连、OpenRouter 代理、自建转发等&#xff09;时&#xff0c;每次切换项目都需要手动修改…...

基于大语言模型的银行对账单自动化分析与财务预测实战

1. 项目概述&#xff1a;当大语言模型遇上个人财务分析最近在GitHub上看到一个挺有意思的项目&#xff0c;叫“AI银行对账单文档自动化与个人财务分析预测”。光看这个标题&#xff0c;就能感觉到一股浓浓的“技术赋能生活”的味道。简单来说&#xff0c;这个项目想干的事儿&am…...

流处理优化:提高实时数据处理性能

流处理优化&#xff1a;提高实时数据处理性能 一、流处理优化概述 1.1 流处理优化的定义 流处理优化是指通过优化流处理系统的性能、吞吐量和延迟&#xff0c;提高实时数据处理能力的过程。它涉及优化数据处理管道、资源配置和算法实现。 1.2 流处理优化的价值 低延迟&#xff…...

Cognize-Agent™空间智能体,98.5%故障预警准确率,终结非计划停机

Cognize-Agent™空间智能体&#xff0c;98.5%故障预警准确率&#xff0c;终结非计划停机工业制造领域&#xff0c;设备非计划停机始终是制约生产效率、拉高运维成本的核心痛点。传统设备运维依赖定期检修、事后抢修&#xff0c;依赖人工巡检与单一数据监测&#xff0c;无法提前…...

上午题_程序设计语言

编译程序和解释程序...

2026年AI大模型接口加速站亲测:六家平台横评,诗云API(ShiyunApi)成最优之选

在进行AI开发时&#xff0c;一个现实问题摆在眼前&#xff1a;如何接入模型厂商的官方API&#xff1f;对于海外开发者而言&#xff0c;注册、绑卡、调用这三步便能轻松解决。然而&#xff0c;国内开发者却面临着诸多难题&#xff0c;如跨境网络波动、外币支付门槛、发票合规需求…...