news 2026/5/7 12:04:08

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/5/5 0:12:32

巡防勤务可视化管理

巡防勤务可视化管理 巡防勤务管理可视化系统&#xff0c;基于大数据平台的警务地理信息系统&#xff0c;可以实时查看警力在岗状态、警力分布、应急资源等。系统支持快速定位警员、车辆的位置&#xff0c;查看警力详细信息&#xff0c;调取监控视频画面&#xff0c;并进行单方…

作者头像 李华
网站建设 2026/5/7 4:13:51

想把网页保存成PDF文件,快速删掉侧边栏广告再打印

想要把网页保存成PDF文件的时候经常会有右侧左侧侧边栏挡住主要内容。怎么办呢&#xff1f; 打开 开发者模式 在 console 里粘贴以下&#xff0c;回车&#xff0c;就好了&#xff01; // 隐藏所有可能包含侧边栏的常见元素 var style document.createElement(style); style.in…

作者头像 李华
网站建设 2026/5/4 5:05:53

深度学习之第八课迁移学习(残差网络ResNet)

目录 简介 一、迁移学习 1.什么是迁移学习 2. 迁移学习的步骤 二、残差网络ResNet 1.了解ResNet 2.ResNet网络—残差结构 三、代码分析 1. 导入必要的库 2. 模型准备(迁移学习) 3. 数据预处理 4. 自定义数据集类 5. 数据加载器 6. 设备配置 7. 训练函数 8. 测…

作者头像 李华
网站建设 2026/5/5 1:58:57

计算机视觉系列之opencv语法基础案例分析之银行卡号识别

简介 计算机视觉系列第一课opencv语法(一)保姆级教学 计算机视觉系列第一课opencv语法(二)保姆级教学 计算机视觉系列第一课opencv语法(三)保姆级教学 [计算机视觉第一课opencv(四)保姆级教学][opencv 3] 关于计算机视觉的基础内容我们之前已经说完了,今天我们就来用…

作者头像 李华
网站建设 2026/5/6 22:42:09

工业控制场景下模拟I2C通信的完整指南

以下是对您提供的博文《工业控制场景下模拟IC通信的完整指南&#xff1a;原理、实现与鲁棒性设计》进行 深度润色与结构重构后的专业级技术文章 。本次优化严格遵循您的全部要求&#xff1a; ✅ 彻底去除AI痕迹&#xff08;无模板化表达、无空洞套话、无机械连接词&#xff…

作者头像 李华
网站建设 2026/5/5 1:58:57

Z-Image-Turbo适合哪些场景?这5个最实用

Z-Image-Turbo适合哪些场景&#xff1f;这5个最实用 你有没有过这样的体验&#xff1a; 想快速出一张电商主图&#xff0c;等了半分钟&#xff0c;进度条才走到60%&#xff1b; 客户临时要改三版海报文案&#xff0c;每改一次就得重跑模型&#xff1b; 做教育课件需要配图&…

作者头像 李华