news 2026/4/23 12:32:41

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/11 14:45:43

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

摘要 随着信息技术的快速发展&#xff0c;医药行业对高效、智能的管理系统需求日益增长。传统医药管理方式依赖人工操作&#xff0c;存在效率低、易出错、数据难以共享等问题&#xff0c;尤其在药品库存、患者信息管理和处方流转等方面表现尤为突出。医药管理系统平台通过信息…

作者头像 李华
网站建设 2026/4/23 9:45:44

三极管门电路

目录 概述 核心基础:三极管非门(反相器) Multisim仿真分析 1、非门(基础门)——一个NPN 2、与非门——两个NPN 3、与门——三个NPN 核心电路结构(3 个 NPN 管,核心为 2 输入 + 1 反相) 第一步:Q1/Q2 串联 → 与非门(全 0 出 1,有 1 出 0) 第二步:Q3 反相 →…

作者头像 李华
网站建设 2026/4/23 9:48:15

基于微分几何特征和黎曼流形图嵌入的多尺度几何结构特征融合的机械故障诊断(Python)

首先从原始振动信号中加载数据并进行预处理&#xff0c;包括去直流、标准化和信号分段。然后&#xff0c;采用微分几何方法从每个信号段中提取几何特征&#xff0c;包括曲率、挠率、测地距离、Frenet标架、黎曼曲率张量和流形拓扑特征等&#xff0c;这些特征描述了信号在相空间…

作者头像 李华
网站建设 2026/4/23 9:45:25

WS2812_CONTROL使用手册

https://blog.csdn.net/2301_80317247/article/details/157438619?fromshareblogdetail&sharetypeblogdetail&sharerId157438619&sharereferPC&sharesource2301_80317247&sharefromfrom_link WS2812B控制指令完整使用说明 指令架构总览 指令格式&#…

作者头像 李华
网站建设 2026/4/17 20:53:25

SpringBoot+Vue 文理医院预约挂号系统平台完整项目源码+SQL脚本+接口文档【Java Web毕设】

摘要 随着信息技术的快速发展&#xff0c;医疗行业的信息化建设已成为提升医疗服务质量和效率的重要手段。传统的医院挂号方式存在排队时间长、信息不对称等问题&#xff0c;严重影响了患者的就医体验。文理医院作为一家综合性医疗机构&#xff0c;亟需一套高效、便捷的预约挂…

作者头像 李华