解题报告-HDOJ-1162(最小生成树——Prim)

Windows11开机必看:3种方法跳过联网激活(含最新OOBE命令) 本文详细介绍了Windows11新机开箱时绕过联网激活的三种实用方法,包括任务管理器终止进程法、命令行强制终止法和最新的OOBE\BYPASSNRO命令法。特别推荐使用微软官方预留的OOBE命令,操作简单且无副作用,帮助用户快速完成系统设置。 阅读详情
题意:
Eddy画了画像,由几个点组成,求解出能把所有点连接在一起所需要的最短线的和。
这一题所涉及的内容是最小生成树,求解最小生成树的方法可以使用普林姆和克鲁斯卡尔两种方法,
这里介绍一下普林姆算法的思想。
假设有如下图1:
点集a1 = {a,b,c,d,e},a2为空集,普林姆算法需要空集a2加入点集a1中的点,同时集合a1去
掉该点,直至a1为空集。假设我们从点a开始加入,下面用图像分步展示操作步骤:
第一步:把节点集合a1中的节点a加入a2中构成一棵树,同时去掉a1中的点a,此时a1 = {b,c,d,e},
a2 = {a}。
第二步:搜索a1中的全部节点找到a1中到a2集合中的最小距离,即找到找到a1中的所有节点到这棵生成
树的最小距离。所以找到了d点。
第三步、第四步、第五步:继续重复第二步的操作,直到所有的点都构成一棵生成树。最终第五步生成了一
棵最小生成树。

这道题目使用这种方法就可以解决了。以下就是我的C语言实现代码:
#include <stdio.h>
#include <math.h>
#include <string.h>

#define MAXN 110
double map[MAXN][MAXN];
int used[MAXN];//标记数组
struct{
	double x;
	double y;
}node[MAXN];//保存节点信息

double prim (int n)
{
	int i,j;
	int y;
	double sum = 0;
	used[0] = 1;
	while (1)
	{
		int flag = 0;
		double min = 100000000;
		for (i = 0; i < n; i++)
		{
			if(!used[i])
			{//判断是否还有点未被标记,即是否在a1数组中
				flag = 1;
				break;
			}
		}
		if (flag)
		{
			for (i = 0; i < n; i++)
			{
				if (used[i])
				{//判断该点是否在a2数组中
					for (j = 0; j < n; j++)
					{
						if (map[i][j] < min && i != j && !used[j])
						{
							min = map[i][j];
							y = j;//保存节点的位置
						}
					}
				}
			}
			used[y] = 1;
			sum += min;
		}
		else
		{
			return sum;
		}
	}
}

int main ()
{
	int n;
	int i,j;
	while (scanf("%d",&n) != EOF)
	{
		memset (used, 0, sizeof (used));
		for (i = 0; i < n; i++)
		{
			scanf ("%lf%lf",&node[i].x,&node[i].y);
		}
		for (i = 0; i < n; i++)
		{
			for (j = 0; j < n; j++)
			{
				map[i][j] = map[j][i] = sqrt ((node[i].x - node[j].x) * (node[i].x - node[j].x) + (node[i].y - node[j].y) * (node[i].y - node[j].y));
			}
		}
		printf ("%.2lf\n",prim (n));
	}
	return 0;
}

去面试游戏测试工程师,面试官看着我的简历呆住了 !我个人整理了我这几年软件测试生涯整理的一些技术资料,包含:电子书,简历模块,各种工作模板,面试宝典,自学项目等。欢迎大家点击下方名片免费领取,千万不要错过哦。 阅读详情

相关推荐

Layout常见错误汇总-不定时更

1、在做LVS时,出现中断错误 解决方法: 重新建立新的schematic和layout文件,对应好其中的元器件,同时两个文件的名字也要对应好“schematic”和“layout”,其他名字的话软件找不到如何对应。

weixin_38753095的博客 4万+

HDOJ水题集合1:最小生成树(Kruskal)

1001 畅通工程 HDOJ1232 并查集集合个数 畅通工程 Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 92906 Accepted Submission(s): 49515 Problem Description 某省调查城镇交通状况,得到现有城镇道路统计表,表中列出了每条道路直接连通的城镇。省政府“畅通工程”的目标是使全省任何

小哈里的博客 866

YOLOv8实战:用Labelme标注自定义数据集并训练分割模型(附完整代码)

本文详细介绍了使用Labelme标注自定义数据集并训练YOLOv8实例分割模型的完整流程。从环境搭建、数据标注与格式转换,到模型训练、调优、验证及部署,提供了实战代码和调优建议。文章还探讨了如何结合追踪目标技术,实现视频流中的实例分割与目标追踪,为计算机视觉应用提供了一套可复制的解决方案。

552

最小生成树 hdoj1233 nyoj38

Minimum Spanning Tree 1.Prim算法是不断增加顶点的算法 isadded[i]:表示点i是否加入 lowcost[i]:表示以i为终点的边的最小权值,当lowcost[i]=0说明以i为终点的边的最小权值=0,也就是表示i点加入了MST prim是以任意边为起始点,用一个lowcost[i]数组来维护到顶点i的最小距离,每次加入lowcost最小

sentimental_dog的博客 387

无人机频谱侦测与智能识别技术实战解析

本文深入解析无人机频谱侦测与智能识别技术实战应用,涵盖无线电侦测、信号处理和定位技术等核心内容。通过频谱分析、特征提取和机器学习算法优化,实现高精度无人机识别与定位,并分享复杂环境下的应对策略和系统集成经验。

weixin_28419039的博客 488

别再让PyCharm吃光你的C盘!保姆级教程:安全迁移config、plugins和remote sources到D盘

本文提供了一份详细的PyCharm配置与缓存文件迁移指南,帮助开发者将config、plugins和remote sources等占用大量C盘空间的文件安全转移到D盘。通过修改data.properties文件和正确迁移顺序,确保PyCharm功能不受影响,同时释放宝贵的系统盘空间。

weixin_28836989的博客 423

hdoj 畅通工程(简单最小生成树问题)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1863 题目为中文题目,简单易懂,从题目就可以很容易的知道是最小生成树,也可以说就是纯模板题。但还是需要了解和掌握模板。 #include #include #include using namespace std; const int MAXN=0x3f3f3f3

笨小孩的专栏 831

万字长文,YOLOv8 yaml 文件解析 | 一文搞定 YOLOv8 分类任务,检测任务,分割任务,关键点任务

YOLOv8 yaml 文件解析 | 一文搞定 YOLOv8 分类任务,检测任务,分割任务,关键点任务

Coding... 1万+

杭电OJ 1162(C++)

计算最小生成树的总长度,使用 Kruskal算法。 #include <iostream> #include <algorithm> #include <iomanip> using namespace std; const int MAXN = 105; int n; //点的数量 int m; //线的数量 int fa[MAXN]; //父结点数组,...

Intelligence1028的博客 263

零差云控 ZeroErr eRob 电机 CAN、CANopen、EtherCAT、ROS2 机器人开发详细教程

TwinCAT 3(Windows 控制与自动化技术)是 Beckhoff 提供的开发平台,可将任何兼容 PC 转变为实时控制系统,用于管理各种类型的工业自动化系统,如 PLC(可编程逻辑控制器)、运动控制、机器人等。

机器人控制与仿真应用 1万+

C语言使用开源库libusb进行USB设备操作

https://libusb.info/libusb is a C library that provides generic access to USB devices. It is intended to be used by developers to facilitate the production of applications that communicate with USB hardware. It is portable: Using a single cross-platform AP

m0_60352504的博客 1553

HDOJ 4463 Outlets 最小生成树

Prim....似乎没有考虑多点共线也能A..... Outlets Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 2565    Accepted Submission(s): 1182 Problem D

码代码的猿猿 861

基于51单片机的智能台灯设计:嵌入式程序设计实现

随着智能家居和物联网的快速发展,智能台灯作为一种典型的智能家居产品,已成为现代家庭中不可或缺的设备。传统的台灯只能提供简单的照明功能,而智能台灯不仅具备基础的照明功能,还能根据用户的需求进行自动调节,比如自动调节亮度、色温,甚至具备定时开关、远程控制等智能功能。本文将介绍如何基于51单片机设计一款智能台灯。我们将涉及硬件设计、嵌入式系统架构、传感器选择、调光控制、语音识别、远程控制等方面,详细阐述如何实现这些功能,并给出相关的代码和实现步骤。

2201_76125393的博客 836

HDOJ 1162 Eddy's picture

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1162 源代码://HDOJ 1162 AC #include #include using namespace std; #define MAX

90worker 2008

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

Prim算法求最小生成树 附hdoj1162

以下测试数据所用的图为: #include using namespace std; //Prim算法 //朴素版本 /* key[所有] = INF;done[所有] = false;par[i] = -1; 根据指定树根r,设置key[r] = 0; 执行n次 { 选择key[]最小的一个点,记录为x done[x] = true 对于所有x可达的点,更新它们key[]及pa

architect19的专栏 889

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

HDOJ1162(Prim 或 Kruscal)

标准最小生成树 本文提供两种做法: PrimKruscal Prim解法: #include #include using namespace std; struct tag_point{ double x,y; }point[105]; double map[105][105]; int N; bool judge[105]; double dis(int i,in

淡墨写江山 589

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

HDOJ 1162 Eddy's picture 最小生成树 Kruscal && Prim

Eddy's picture 最小生成树,模板 Kruscal 或 Prim Eddy's picture Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 8122 Accepted Submission(s): 4118 Problem Description Eddy begins to like paint

jianjun的专栏 442

hdu 1162 prim算法

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1162题目大意:图纸上有一些点,要用通过墨水用直线将它们连在一起,求用最少的墨水时所连的长度思路:典型的最小生成树问题,只是要调用函数自己计算这些点之间的距离#include #include #define N 105 #define Initmax 1005 double a[N][N],lowcost[N],x[N],y[N]; int s[N],n; double dist(double x

Acceptyly的专栏 586

最小生成树 Prim算法的实现及应用

关于prim算法先把有的点放于一个集合(或者数组)里,这个集合里存放的是所有走过的点。初始值为0或者false表示还没有点声明一个一维数组用于记录各点的权值[可理解为起始点到目标点的距离],声明一个二维数组用于记录某点到某一点的权值,如果这两点不可达到,则设置为无穷大 具体执行过

90worker 1万+

杭电ACM1162(prim)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1162 题目大意:在一个平面上有若干点,给出它们的横纵坐标,要求求出将这些点全部连通的距离。 解题思路:最小生成树,prim算法。不同的是输入点坐标之后要自行进行一次转化就变成了标准的最短路径问题。 AC代码:

Tworld 919

Kruskal算法求最小生成树 附hdoj1162

自己实现的kruskal算法。 其实懂了并查集,实现kurskal算法便很简单了。 按照克鲁斯卡尔算法,从最小的边开始选(所以把所有边按权值非降序排序),然后选的过程一定是从小到大地选,如果发现不适合的就抛弃,而且绝对不会回溯再次检查是否适合(不吃回头艹)。因此如何判断边适合就是算法的关键了。 这里的关键其实就是并查集,并查集是用集合的观点来看结点与结点的关系。结点作为元素,只有属于和不属于

architect19的专栏 4153

HDOJ1162Eddy's picture

题目:http://acm.hdu.edu.cn/showproblem.php?pid=1162   #include #include bool P[110];//标记数组,标记某一个点是否已经连接到树上 struct point { double x,y; }Point[110],A[110]; double SegLen(point a,point b) { re

为编程而生 885

【hdoj 1162】Eddy's picture

【hdoj 1162】Eddy's picture 最小生成树prim算法

nininicrystal的专栏 373
上一篇: STL 优先队列、队列、栈的使用
下一篇: 最大二分匹配
WellerZhao
博客等级 码龄15年 11粉丝 28原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值