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/16 12:39:40

Java Web 工作流程管理系统系统源码-SpringBoot2+Vue3+MyBatis-Plus+MySQL8.0【含文档】

摘要 随着企业信息化建设的不断深入&#xff0c;工作流程管理系统在现代组织中的作用日益凸显。传统的手工流程管理方式效率低下&#xff0c;难以满足企业高效协同的需求&#xff0c;亟需通过数字化手段优化流程管理。工作流程管理系统能够实现任务分配、进度跟踪、审批流转的自…

作者头像 李华
网站建设 2026/4/16 11:30:04

三极管的三种组态电路

目录 1、三极管组态特性总结 2、三极管组态分析过程总结 一、静态分析(直流分析) 二、动态分析(交流分析) 三、核心共性与差异 3、共集电极电路(CC) 4、共基极电路(CB) 5、共射极电路(CE) 摘要 三极管三种基本组态电路特性分析:共集电极(CC)电路具有高输…

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

非稳态多谐震荡电路

目录 0、概述 1、工作原理分析 1.1 不考虑电容时间 1.2 过程1 1.3 过程2 1.4 过程3 1.5 过程4 1.6 过程5 1.7 过程6 1.8 过程7 1.9 过程8 2 Multisim仿真分析 摘要 非稳态多谐振荡电路是一种自激振荡电路,通过双NPN三极管反相器交叉耦合,配合RC充放电实现连续方…

作者头像 李华
网站建设 2026/4/16 12:59:00

三极管串联型线性稳压电源

目录 1 核心结构与原理 1 核心元件 2 稳压原理 2.1 负载变化过程分析 2.2 负载变化对应的输出变化: 3 Multisim仿真分析 3.1 输入电压变化对应参数变化 3.2 负载电压变化对应参数变化 摘要 该文分析了串联型晶体管稳压电路的工作原理。电路通过NPN功率三极管作为调整…

作者头像 李华
网站建设 2026/4/15 16:31:45

基于高维几何流形学习和最优传输理论融合的机械故障诊断方法(Python)

首先从振动信号文件中加载数据&#xff0c;进行去除直流分量、标准化和分段预处理&#xff0c;形成样本集并划分训练集和测试集。 然后通过多路并行的几何特征提取方法从信号中提取丰富的几何信息&#xff1a;谱几何方法基于图拉普拉斯算子分析信号的全局连接性和结构特性&…

作者头像 李华