HDU 1875 最小生成树prim算法
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cmath>
#include<cstring>
#define MAX 0xffffffff //定义一个最小生成树中不可能达到的值
const int qq=+; // 点的上限
using namespace std;
struct point{
int x,y;
}node[qq];
double lowcost[qq][qq]; // 邻接矩阵
int vis[qq]; // 最小生成树的点集合vis数组
int n;
double f(point a,point b)
{
return sqrt(pow(a.x-b.x,2.0)+pow(a.y-b.y,2.0));
}
void build()
{
double len;
for(int j,i=;i<n;++i)
for(j=i;j<n;++j){
len=f(node[i],node[j]); // 计算两点之间的距离也就是点与点的权值、
if(len>=&&len<=)
lowcost[i][j]=lowcost[j][i]=(i==j)?:len;
else
lowcost[i][j]=lowcost[j][i]=MAX; // 值为MAX 意味着这两点不连通、
}
}
void prim()
{
int k,t=n;
double min,tot=;
vis[]=; //初始点0进入最小生成树数组中、
while(--t){
min=MAX;
for(int i=;i<n;++i){
if(vis[i]!=&&lowcost[][i]<min){ //lowcost[0]代表当前的最小生成树的最小权值数组、
min=lowcost[][i]; //找到当前最小的权值并记录是哪一个点、
k=i;
}
}
if(min==MAX) break; //如果最小权值都为MAX 也就是不连通也可以跳出循环了、
vis[k]=; // 点k进入最小生成树数组、
tot+=min; //统计权值、
for(int i=;i<n;++i) //因为加入了一个点到最小生成树中,所以要更新当前的最小权值数组、
if(vis[i]!=&&lowcost[k][i]<lowcost[][i])
lowcost[][i]=lowcost[k][i];
}
if(t==) printf("%.1f\n",tot*);
else printf("oh!\n");
}
int main()
{
int t;cin >> t;
while(t--){
memset(vis,,sizeof(vis)); //清空标记数组、
scanf("%d",&n);
for(int i=;i<n;++i)
scanf("%d%d",&node[i].x,&node[i].y);
build();
prim();
}
}
刚做这题我模型没转换过来,以为只要把横坐标按从小到大排序,横坐标相同就按纵坐标从小到大排序然后然后从左到右从下道上连接各点就是最小生成树、
- - 、 错的太离谱了,代码就不拿出来丢脸了
题目设置的限制条件实际上就是不连通,这点想通了就好做了
HDU 1875 最小生成树prim算法的更多相关文章
- hdu 1233(最小生成树 prim算法)
还是畅通工程 Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Subm ...
- 数据结构代码整理(线性表,栈,队列,串,二叉树,图的建立和遍历stl,最小生成树prim算法)。。持续更新中。。。
//归并排序递归方法实现 #include <iostream> #include <cstdio> using namespace std; #define maxn 100 ...
- 最小生成树Prim算法(邻接矩阵和邻接表)
最小生成树,普利姆算法. 简述算法: 先初始化一棵只有一个顶点的树,以这一顶点开始,找到它的最小权值,将这条边上的令一个顶点添加到树中 再从这棵树中的所有顶点中找到一个最小权值(而且权值的另一顶点不属 ...
- 最小生成树—prim算法
最小生成树prim算法实现 所谓生成树,就是n个点之间连成n-1条边的图形.而最小生成树,就是权值(两点间直线的值)之和的最小值. 首先,要用二维数组记录点和权值.如上图所示无向图: int map[ ...
- Highways POJ-1751 最小生成树 Prim算法
Highways POJ-1751 最小生成树 Prim算法 题意 有一个N个城市M条路的无向图,给你N个城市的坐标,然后现在该无向图已经有M条边了,问你还需要添加总长为多少的边能使得该无向图连通.输 ...
- SWUST OJ 1075 求最小生成树(Prim算法)
求最小生成树(Prim算法) 我对提示代码做了简要分析,提示代码大致写了以下几个内容 给了几个基础的工具,邻接表记录图的一个的结构体,记录Prim算法中最近的边的结构体,记录目标边的结构体(始末点,值 ...
- 图论算法(五)最小生成树Prim算法
最小生成树\(Prim\)算法 我们通常求最小生成树有两种常见的算法--\(Prim\)和\(Kruskal\)算法,今天先总结最小生成树概念和比较简单的\(Prim\)算法 Part 1:最小生成树 ...
- 最小生成树,Prim算法与Kruskal算法,408方向,思路与实现分析
最小生成树,Prim算法与Kruskal算法,408方向,思路与实现分析 最小生成树,老生常谈了,生活中也总会有各种各样的问题,在这里,我来带你一起分析一下这个算法的思路与实现的方式吧~~ 在考研中呢 ...
- MST(最小生成树)——Prim算法——HDU 1879-继续畅通工程
Prim算法很好理解,特别是学完了迪杰斯特拉算法之后,更加能理解Prim的算法思想 和迪杰斯特拉算法差不多,由于最后要形成连通图,故任意指定一个点,作为初始点,遍历所有点,以当前最小权值的点(和迪杰斯 ...
随机推荐
- Mysql的CMD操作
一.MySQL登录和退出——在CMD模式操作 l 语法格式:mysql.exe –h主机名 –u用户名 –p密码 l 参数说明: mysql.exe是mysql服务器的主应用程序. -h代 ...
- iOS 7: 如何为iPhone 5s编译64位应用
随着iPhone 5S的推出,大家开始关心5S上所使用的64位CPU A7. 除了关心A7的性能以外,大家还会关心一个问题,那就是使用A7的64位系统对应用有没有什么要求.特别是应用开发者,大家都比较 ...
- SAS之大话PDV
SAS之大话PDV 之所以说是数据源,而非输入缓冲区的原因上一条推送已经说明,这里就不再啰嗦啦. 这里我们且将DATA步流程简单地分为从数据源读入到pdv和从pdv写入数据集. IF语句 & ...
- buffer的相关小知识
php与mysql的连接有三种方式,mysql,mysqli,pdo.不管使用哪种方式进行连接,都有使用buffer和不使用buffer的区别. 什么叫使用buffer和不使用buffer呢? 客户端 ...
- V8引擎实现标准ECMA-262(三)
推荐英文原址ECMA-262 3.构造函数 构造函数除了通过指定的模式创建对象以外,还有另外一个好处--它能够自动设置新创建对象的原型对象,这个原型对象存储在构造函数的Prototype属性中. 例如 ...
- org.hibernate.PropertyAccessException: Null value was assigned to a property of primitive type setter of com.trs.om.bean.User.retryCount
六月 29, 2019 5:42:45 下午 org.apache.catalina.core.AprLifecycleListener init信息: The APR based Apache To ...
- pom.xml中若出现jar not found;
pom.xml中若出现jar not found;我们可以直接在view ->tool windows ->Maven Project 中直接install
- QT 引用之前项目模板导致计算速度严重下降
最近做RRT规划算法,在新建工程中测试时,每一个周期大概花费20MS,但是当我把算法移植到之前写的工程模板中时,计算效率相当低,变为500毫秒.期初是以为代码有问题,然后就逐句查找,发现代码并没有问题 ...
- 网络流24题 搭配飞行员(DCOJ8000)
题目描述 飞行大队有若干个来自各地的驾驶员,专门驾驶一种型号的飞机,这种飞机每架有两个驾驶员,需一个正驾驶员和一个副驾驶员.由于种种原因,例如相互配合的问题,有些驾驶员不能在同一架飞机上飞行,问如何搭 ...
- KiCad EDA 5.1.3 正式发布了
KiCad EDA 是一款用于印刷电路板设计的开源自由软件,最初由法国人 Jean-Pierre Charras 于 1992 年推出1,现由 KiCad 开发团队维护. KiCad 目前支持英语.法 ...