剑鱼行动

目录

  • 剑鱼行动
    • Description
    • Input
    • Output
    • Sample Input
    • Sample Output
    • 解析
    • 难点
    • 代码

Description

给出N个点的坐标,对它们建立一个最小生成树,代价就是连接它们的路径的长度,现要求总长度最小。N的值在100以内,坐标值在[-10000,10000].结果保留二位小数


Input

N个点 ,N个点的坐标


Output

连接它们的最短路径的长度


Sample Input

5 ---------------5个点
0 0 ---------------5个点点的坐标
0 1
1 1
1 0
0.5 0.5


Sample Output

2.83


解析

这道题一看就是最小生成树,有两种方法,分别为
普里姆算法(prim)

克鲁斯卡尔(kruskal)
本题解使用的是 kruskal
假设连通网G=(V,E),则令最小生成树的初始状态为只有n个顶点而无边的非连通网,图中每个顶点自成一个连通分量。在E中选择代价最小的边,若该边依附的顶点落在T中不同的连通分量上,则将此边加入到T中,否则舍去此边而选择下一条代价最小的边。依此类推,直至T中所有顶点都在同一连通分量上为止。


难点

题目给出的可能是小数,所以就有了我们的读入方式
aj[i][1]储存x坐标,a[j][2]储存y坐标

for(int i=1;i<=n;i++)scanf("%lf%lf",&aj[i][1],&aj[i][2]);

以及我们的计算距离公式,原理是勾股定理

sqrt((abs(aj[i][1]-aj[j][1]))*(abs(aj[i][1]-aj[j][1]))+(abs(aj[i][2]-aj[j][2]))*(abs(aj[i][2]-aj[j][2])));

代码

模板解析

#include<cmath>
#include<stdio.h>
#include<iostream>
using namespace std;
int n,v[10005],p,q;
double ans,minn,aj[10005][3],a[10005][10005];
int main(){scanf("%d",&n);for(int i=1;i<=n;i++)scanf("%lf%lf",&aj[i][1],&aj[i][2]); //神奇的读入~for(int i=1;i<=n;i++){ //神奇的处理~~~for(int j=1;j<n;j++){a[i][j]=sqrt((abs(aj[i][1]-aj[j][1]))*(abs(aj[i][1]-aj[j][1]))+(abs(aj[i][2]-aj[j][2]))*(abs(aj[i][2]-aj[j][2])));a[j][i]=a[i][j];}v[i]=i; //从在开始,都是套模板 }for(int i=1;i<=n-1;i++){minn=99999999;for(int k=1;k<=n;k++)for(int j=1;j<=n;j++)if(v[k]!=v[j] and a[k][j]<=minn and a[k][j]!=0){minn=a[k][j];p=j;q=k;}ans+=minn;int ooxx=v[p];for(int k=1;k<=n;k++){if(v[k]==ooxx)v[k]=v[q];}}    printf("%.2lf",ans); //记得保留两位小数return 0;
}

[图论]剑鱼行动:kruskal相关推荐

  1. 图论(prim,kruskal,Dijsktra三大算法)

    prim 普里姆算法(Prim算法),图论中的一种算法,可在加权连通图里搜索最小生成树.意即由此算法搜索到的边子集所构成的树中,不但包括了连通图里的所有顶点(英语:Vertex (graphtheor ...

  2. [图论]剑鱼行动:prim

    剑鱼行动 目录 剑鱼行动 Description Input Output Sample Input Sample Output 解析 难点 代码 Description 给出N个点的坐标,对它们建立 ...

  3. 图论 —— 生成树 —— 最小生成树 —— Kruskal

    [基本思想] Kruskal 算法基本思想是并查集思想,将所有边升序排序,并认为每一个点都是孤立的,分属 n 个独立的集合. 按顺序枚举每一条边,如果这条边连接的两个点分属两个不同的集合,那么就将这条 ...

  4. 最小生成树 Kruskal 和 Prim算法及堆优化

    目录 生成树/最小生成树是什么. 一.Kruskal算法 Kruskal模板 二.Prim算法及堆优化 1.遍历 Prim 普通模板 2.堆优化 Prim 堆优化模板 解决最小生成树的问题之前,我们先 ...

  5. 证明kruskal算法求解图的最小生成树具有贪心选择性质_将并查集应用在图论中的最小生成树算法——Kruskal...

    点击上方蓝字,和我一起学技术. 今天是算法和数据结构专题的第19篇文章,我们一起来看看最小生成树. 我们先不讲算法的原理,也不讲一些七七八八的概念,因为对于初学者来说,看到这些术语和概念往往会很头疼. ...

  6. 图论最短路及生成树(Prim,Djikstra,Spfa,Bellan-ford,kruskal,topsort)

    图论在算法中具有举足轻重的地位,只有学好图才能游刃有余.本文章将介绍图论中一些基础算法,可以说总结的十分全面,文章结尾也会分析各算法的差异,清晰易懂.并附上代码模板. 图论(最短路.生成树) 一.拓扑 ...

  7. 数据结构实验之图论九:最小生成树(Prim/Kruskal)

    Description 有n个城市,其中有些城市之间可以修建公路,修建不同的公路费用是不同的.现在我们想知道,最少花多少钱修公路可以将所有的城市连在一起,使在任意一城市出发,可以到达其他任意的城市. ...

  8. 图论(九)最小生成树-Kruskal算法

    前面说过,Kruskal是从最短边着手构建最小生成树的.其基本过程是:先对图中的所有边按照权重值从小到大进行排序,然后着手选取边构建最小生成树.如果直接从小到大按顺序选取,有可能形成了环,所以对环的处 ...

  9. 【并查集】【图论】【最小生成树】剑鱼行动(ssl 1618)

    剑鱼行动 ssl 1618 题目大意: 求一个平面直角坐标系中的最小生成树 原题: 题目描述 给出N个点的坐标,对它们建立一个最小生成树,代价就是连接它们的路径的长度,现要求总长度最小.N的值在100 ...

最新文章

  1. 【RocketMQ工作原理】消息的消费
  2. clion 工程打开选项 安全模式预览 Preview in Safe Mode 信任工程 Trust Project 简介
  3. [故障公告]14:40-15:00博客站点web服务器雪崩似的CPU 100%
  4. 网络登录_发布猫系统登录免费网络推广-绥芬河推广资讯
  5. Arithmetic Slices
  6. JDK的下载、安装和配置
  7. c# webclient 保存会话信息_会话保持机制cookie和session
  8. cgcs2000高斯平面直角坐标_多元微积分——环量、旋度与格林、斯托克斯公式,通量、散度与高斯公式...
  9. 易筋SpringBoot 2.1 | 第廿六篇:SpringBoot访问缓存抽象Cache
  10. 编程实现strstr函数
  11. c语言程序设计电子科技大学,C语言程序设计
  12. 花1分钟用Word手动绘制流程图,看完我学会了!
  13. 自由 stm32f103c8t6芯片学习原理图+中文数据手册pdf
  14. 【个人思考系列】在美团点评当工程师的第一年总结
  15. latex公式换行后保证括弧大小相同
  16. 猿创征文|聊一聊我在字节跳动做项目质量改进的经验
  17. 如何带好一个20人团队?
  18. pc计算机网卡的排查,怎么检测网卡是否有问题-检测网卡是否有问题的方法 - 河东软件园...
  19. vivado 数码管学习(二)数码管显示一位数字和显示八位数字
  20. 【OpenCV 例程200篇】25. 图像的平移(cv2.warpAffine)

热门文章

  1. (一)职业规划和制定计划
  2. oracle 2019 ocp,2019 OCP简介
  3. 5-TAMRA标记LYS赖氨酸,5-TAMRA-Lysine结构式及光谱图分享
  4. JS实现文本的语音朗读
  5. 物联网板开发入门指南
  6. Qt 显示图片 放大 缩小 移动
  7. MyBatis 入门级配置文件
  8. 努力学习,天天向上!
  9. 计算机房间墙壁的布置,房间小怎么布置 小房间布置有妙招
  10. 获上市公司投资的睿图智能,如何打开“机器视觉”新空间?