news 2026/10/27 22:53:03

蓝桥杯 162.通电(Prim算法)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
蓝桥杯 162.通电(Prim算法)

2015 年,全中国实现了户户通电。作为一名电力建设者,小明正在帮助一带一路上的国家通电。

这一次,小明要帮助 nn 个村庄通电,其中 1 号村庄正好可以建立一个发电站,所发的电足够所有村庄使用。

现在,这 nn 个村庄之间都没有电线相连,小明主要要做的是架设电线连接这些村庄,使得所有村庄都直接或间接的与发电站相通。

小明测量了所有村庄的位置(坐标)和高度,如果要连接两个村庄,小明需要花费两个村庄之间的坐标距离加上高度差的平方,形式化描述为坐标为(x1,y1x1​,y1​) 高度为 h1h1​ 的村庄与坐标为 (x2,y2x2​,y2​) 高度为 h2h2​ 的村庄之间连接的费用为

(x1−x2)2+(y1−y2)2+(h1−h2)2(x1​−x2​)2+(y1​−y2​)2​+(h1​−h2​)2

高度的计算方式与横纵坐标的计算方式不同。

由于经费有限,请帮助小明计算他至少要花费多少费用才能使这 nn 个村庄都通电。

输入描述

输入的第一行包含一个整数 nn ,表示村庄的数量。

接下来 nn 行,每个三个整数 x,y,hx,y,h,分别表示一个村庄的横、纵坐标和高度,其中第一个村庄可以建立发电站。

其中,1≤n≤1000,0≤x,y,h≤100001≤n≤1000,0≤x,y,h≤10000。

输出描述

输出一行,包含一个实数,四舍五入保留 2 位小数,表示答案。

输入输出样例

示例

输入

4 1 1 3 9 9 7 8 8 6 4 5 4

输出

17.41

这道题本质就是求最小生成树,这里我们用到Prim算法:

核心思想:

从任意一个起点顶点出发,每次选择当前已连接顶点集合到未连接顶点集合中权值最小的边,将该未连接顶点纳入已连接集合;重复此过程,直到所有顶点都被纳入,最终形成的边集合即为最小生成树。

Prim算法示例演示(起点0)

↓

↓

↓

↓

↓

import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.Arrays; public class Main { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); int n = Integer.parseInt(br.readLine()); int cun[][] = new int[n][3];//村庄信息 for (int i = 0; i < n; i++) { String s[] = br.readLine().split(" "); cun[i][0] = Integer.parseInt(s[0]); cun[i][1] = Integer.parseInt(s[1]); cun[i][2] = Integer.parseInt(s[2]); } double minleng = 0;//最短总长度 double juli[][] = new double[n][n];//各个村庄之间的距离 for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { if (i == j) { juli[i][j] = Double.MAX_VALUE; } else { juli[i][j] = Math.sqrt(Math.pow(cun[i][0] - cun[j][0], 2) + Math.pow(cun[i][1] - cun[j][1], 2)) + Math.pow(cun[i][2] - cun[j][2], 2); } } } //Prim算法初始化 boolean intree[] = new boolean[n];//村庄是否加入当前的生成树中 intree[0] = true;//初始化村庄1 double dist[] = new double[n]; // 记录每个顶点到当前生成树的最小距离 Arrays.fill(dist, Double.MAX_VALUE); dist[0] = 0; for (int i = 1; i < n; i++) { dist[i] = juli[0][i]; } //Prim算法 for (int i = 1; i < n; i++) { int u = -1;// 找到“未访问且距离当前生成树最近”的顶点u double mindist = Double.MAX_VALUE;//u到当前生成树的最小距离 for (int j = 0; j < n; j++) { if (!intree[j] && dist[j] < mindist) { mindist = dist[j]; u = j; } } minleng += mindist; intree[u] = true; // 更新其他未访问顶点到生成树的最小距离 for (int j = 0; j < n; j++) { if (!intree[j] && juli[u][j] < dist[j]) { dist[j] = juli[u][j]; } } } String result = String.format("%.2f", minleng); System.out.println(result); } }
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/28 4:51:35

FTP与HTTP:为何在文件传输中FTP仍具独特优势?

在当今数字化办公环境中&#xff0c;文件传输是日常工作不可或缺的一环。虽然HTTP协议作为互联网的基石广为人知&#xff0c;但在特定场景下&#xff0c;FTP&#xff08;文件传输协议&#xff09;仍然展现出其不可替代的优势。了解这些差异&#xff0c;能帮助企业和团队选择更合…

作者头像 李华
网站建设 2026/10/27 9:15:34

一键智能操作:原神游戏自动化助手完整使用指南

一键智能操作&#xff1a;原神游戏自动化助手完整使用指南 【免费下载链接】better-genshin-impact &#x1f368;BetterGI 更好的原神 - 自动拾取 | 自动剧情 | 全自动钓鱼(AI) | 全自动七圣召唤 | 自动伐木 | 自动派遣 | 一键强化 - UI Automation Testing Tools For Genshi…

作者头像 李华
网站建设 2026/10/27 15:53:39

2025防坑指南:免费降ai率真能信?实测5款降ai率工具,告别知网飘红!

写论文的兄弟姐妹们&#xff0c;这事儿咱们都感同身受。 辛辛苦苦肝出来的论文&#xff0c;查重率好不容易绿了&#xff0c;结果扭头撞上了AIGC检测。明明是自己一个键一个键敲出来的&#xff0c;或者只是稍微润色了一下&#xff0c;就被系统判定是ai降ai生成的。 那种盯着屏…

作者头像 李华
网站建设 2026/10/28 4:14:02

如何用AI智能筛选技术革新文献管理工作流

如何用AI智能筛选技术革新文献管理工作流 【免费下载链接】zotero-gpt GPT Meet Zotero. 项目地址: https://gitcode.com/gh_mirrors/zo/zotero-gpt 你是否曾面对数百篇待读论文感到无从下手&#xff1f;当研究领域不断拓展&#xff0c;传统的手动文献筛选方法已难以应对…

作者头像 李华
网站建设 2026/10/28 6:26:48

SillyTavern版本管理重构:从升级焦虑到从容掌控的完全指南

SillyTavern版本管理重构&#xff1a;从升级焦虑到从容掌控的完全指南 【免费下载链接】SillyTavern LLM Frontend for Power Users. 项目地址: https://gitcode.com/GitHub_Trending/si/SillyTavern 还在为版本升级而夜不能寐吗&#xff1f;担心精心培养的角色数据在升…

作者头像 李华
网站建设 2026/10/28 5:33:48

AI Agent 三大核心组件解析:规划、记忆与工具使用,构建真正智能体

如果 LLM 是 AI 的大脑&#xff0c;那么规划、记忆与工具使用就是它的“心智能力”&#xff0c;让它从对话机器人成长为真正的智能协作者。 在上一篇文章中&#xff0c;我们讨论了 AI Agent 的基本概念与趋势。今天&#xff0c;我们将深入 Agent 的核心架构&#xff0c;解析其三…

作者头像 李华