news 2026/4/15 21:41:57

Prime算法

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Prime算法

邻接矩阵版(推荐 n≤5000,稠密图)

时间复杂度O(n2),无需预建邻接矩阵,动态计算边权(适配圆形 / 坐标类场景),是算法题中最常用的版本。

import java.util.Arrays; /** * Prim算法模板(邻接矩阵版,动态计算边权) * 适用场景:节点数n≤5000的稠密图,边权可动态计算(如坐标类问题) * @param n 节点总数 * @param nodes 节点信息数组(可根据场景自定义,比如圆形的x/y/r) * @return 最小生成树的总权重 */ public class PrimTemplate { // 示例:适配圆形场景的节点结构(可根据实际需求修改) static class Node { int x, y, r; Node(int x, int y, int r) { this.x = x; this.y = y; this.r = r; } } // 核心Prim算法实现(动态计算边权) public static double prim(int n, Node[] nodes) { // 1. 初始化核心数组 boolean[] vis = new boolean[n]; // 标记节点是否加入已选集合 double[] minDist = new double[n]; // 记录每个节点到已选集合的最小距离 Arrays.fill(minDist, Double.MAX_VALUE); // 初始化为无穷大 minDist[0] = 0.0; // 选0号节点作为起点 double totalWeight = 0.0; // 最小生成树总权重 // 2. 主循环:依次选择n个节点加入集合 for (int i = 0; i < n; i++) { // 步骤1:找到未访问、距离已选集合最近的节点u int u = -1; double minVal = Double.MAX_VALUE; for (int j = 0; j < n; j++) { if (!vis[j] && minDist[j] < minVal) { minVal = minDist[j]; u = j; } } // 防御性判断:所有节点已选(n≥1时不会触发) if (u == -1) break; // 步骤2:将u加入已选集合,累加权重 vis[u] = true; totalWeight += minVal; // 步骤3:松弛操作——更新所有未访问节点的最小距离 for (int v = 0; v < n; v++) { if (!vis[v]) { // ========== 关键:根据场景自定义边权计算逻辑 ========== // 示例:圆形场景的边权 = max(0, 圆心距离 - 两圆半径和) long dx = nodes[u].x - nodes[v].x; long dy = nodes[u].y - nodes[v].y; double centerDist = Math.sqrt(dx * dx + dy * dy); double edgeWeight = Math.max(0.0, centerDist - nodes[u].r - nodes[v].r); // 其他场景示例(如普通邻接矩阵): // double edgeWeight = graph[u][v]; // graph是预定义的邻接矩阵 // 更新最小距离 if (edgeWeight < minDist[v]) { minDist[v] = edgeWeight; } } } } return totalWeight; } // 测试示例(圆形连接场景) public static void main(String[] args) { int n = 3; // 3个圆形节点 Node[] nodes = new Node[n]; nodes[0] = new Node(0, 0, 1); nodes[1] = new Node(3, 0, 1); nodes[2] = new Node(6, 0, 1); double result = prim(n, nodes); System.out.printf("最小生成树总权重:%.2f\n", result); // 输出:2.00 } }
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/13 18:19:19

BOOST升压电路Multisim电路仿真原理分析

目录 1 BOOST升压电路概述 工作过程简述 主要元件作用 电路特点 2 原理分析 纹波电流分析 电感选型:平均电流IL和纹波电流▲IL Multisim仿真分析 摘要 本文分析了三极管型BOOST升压电路的工作原理。该电路通过控制三极管Q1的高频开关,使电感L1周期性地储存和释放能…

作者头像 李华
网站建设 2026/4/14 6:43:00

三极管电平转换电路

目录 1 三极管电平转换电路3.3V转5V方法1 1.1 工作过程简述 输入高电平(3.3V)时 输入低电平(0V)时 主要元件作用 电路特点 1.2 Multisim仿真分析 2 三极管电平转换电路5V转3.3V 2.1 工作原理 主要元件作用 电路特点 2.2 Multisim仿真分析 3 三极管电平转换电…

作者头像 李华
网站建设 2026/4/11 22:47:22

AI零售:个性化推荐与智能库存管理

一、引言&#xff1a;AI重构零售行业的核心逻辑 在数字化浪潮的推动下&#xff0c;零售业正经历从“经验驱动”向“数据驱动”的根本性变革。传统零售面临的同质化竞争、库存积压、用户体验割裂等痛点&#xff0c;随着人工智能&#xff08;AI&#xff09;技术的深度渗透得到逐…

作者头像 李华
网站建设 2026/4/10 9:16:39

基于SpringBoot+Vue的人格障碍诊断系统管理系统设计与实现【Java+MySQL+MyBatis完整源码】

摘要 人格障碍是一种复杂的心理疾病&#xff0c;对患者的社会功能和生活质量造成深远影响。传统的诊断方式主要依赖医生面诊和心理量表&#xff0c;存在主观性强、效率低下的问题。随着信息技术的快速发展&#xff0c;结合人工智能与大数据分析的智能化诊断系统成为研究热点。…

作者头像 李华
网站建设 2026/4/15 10:07:52

【毕业设计】SpringBoot+Vue+MySQL 秒杀系统平台源码+数据库+论文+部署文档

摘要 随着互联网技术的快速发展&#xff0c;电子商务平台的秒杀活动已成为商家吸引用户的重要手段。高并发场景下的秒杀系统对平台的稳定性、性能和安全性提出了极高要求。传统单机架构难以应对瞬时流量激增&#xff0c;容易导致系统崩溃或数据不一致问题。因此&#xff0c;设计…

作者头像 李华