二维平面无中心点的聚类算法

问题描述

二维平面上有许多点p(x , y),按照彼此之间的欧式距离进行分为若干个集合。若点p1(x1, y1)与点p(x2, y2)之间距离小于d,则认为二者是邻居。

算法思路

给数据集的点进行编号,顺序遍历这些点,找出当前点的邻居,记住已经遍历过的点,直到遍历完数据集

代码实现

import java.util.ArrayList;
import java.util.List;import static java.awt.geom.Point2D.distance;public class Leetcode {// 聚类算法,列表a是节点列表,d是每个集合内任意两点的最短距离public static List<List> spe(List<Node> a, int d) {List<List> r = new ArrayList<>();boolean[] visited = new boolean[a.size()];if (a.size() == 0) return r;for (int i = 0; i < a.size(); i++) {if (visited[a.get(i).index] == false)dfs(a, i, r, visited, new ArrayList<>(), d);}return r;}static void dfs(List<Node> a, int i, List<List> r, boolean[] visited, List<Node> cur, int d) {Node current = a.get(i);cur.add(current);visited[current.index] = true;boolean hasNeighbor = false;for (int j = 0; j < a.size(); j++) {if (j != i && visited[a.get(j).index] == false && distance(current.x, current.y, a.get(j).x, a.get(j).y) <= d) {hasNeighbor = true;dfs(a, j, r, visited, cur, d);}}if (hasNeighbor == false) {r.add(new ArrayList(cur));}}static class Node {double x;   // x坐标double y;    // y坐标int index;   // 在数据集的编号public Node(double[] x, int index) {this.x = x[0];this.y = x[1];this.index = index;}}public static void main(String[] args) {double[] point1 = {1.0, 2.0};double[] point2 = {2.0, 3.0};Node node1 = new Node(point1, 0);Node node2 = new Node(point2, 1);double[] point3 = {11.0, 22.0};double[] point4 = {14.0, 22.0};Node node3 = new Node(point3, 2);Node node4 = new Node(point4, 3);List<Node> t = new ArrayList<>();t.add(node1);t.add(node2);t.add(node3);t.add(node4);List<List> r = spe(t, 10);System.out.println(r);}}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/40204.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

模具监视器的选择要点介绍

模具监视器的选择要点涉及多个方面&#xff0c;以确保其能够满足实际生产需求并提高生产效率。以下是一些关键的选择要点&#xff1a; 一、性能和稳定性 监控精度&#xff1a;选择模具监视器时&#xff0c;首先要考虑其监控精度&#xff0c;包括温度、压力、注射速度等参数的…

Debezium系列之:JVM参数详解和Debezium集群JVM监控看板制作

Debezium系列之:JVM参数详解和Debezium集群JVM监控看板制作 一、JVM参数详解1.jvm_memory_bytes_used2.jvm_memory_bytes_committed3.jvm_memory_bytes_max4.jvm_memory_bytes_init5.jvm_memory_pool_bytes_used6.jvm_memory_pool_bytes_committed7.jvm_memory_pool_bytes_max…

金属3D打印如何精准选材

随着3D打印技术的飞跃发展&#xff0c;模具制造领域迎来了前所未有的创新机遇。在众多3D打印技术中&#xff0c;SLM金属3D打印以其精度高、复杂结构成型能力&#xff0c;成为众多行业的优选。然而&#xff0c;金属打印材料&#xff0c;如何精准选择&#xff0c;以最大化满足项目…

linux 内核打印log太多咋办?

有时候发现&#xff0c;linux 内核打印太多消息了&#xff0c;对有用消息造成了干扰&#xff0c;如果你一个个源文件去关闭打印太麻烦了&#xff0c;有没有一种更方便的方式来关闭这些消息呢&#xff1f; 对这个需求&#xff0c;内核提供了一个强大而又灵活的方式&#xff0c;…

开源 WAF 解析:选择最适合你的防护利器

前言 随着网络安全风险的增加&#xff0c;Web 应用防火墙&#xff08;WAF&#xff09;成为保护网站和应用程序免受攻击的关键工具。在众多的选择中&#xff0c;开源 WAF 以其灵活性、可定制性和成本效益备受青睐。本文将深入探讨几种主流开源 WAF 解决方案&#xff0c;帮助你选…

用html+css设计一个列表清单小卡片

目录 简介: 效果图: 源代码: 可能的问题: 简介: 这个HTML代码片段是一个简单的列表清单设计。它包含一个卡片元素(class为"card"),内部包含一个无序列表(ul),列表项(li)前面有一个特殊的符号(△)。整个卡片元素设计成300px宽,150px高,具有圆角边…

从0-1配置一个ROS项目

目标&#xff1a;从0-1配置一个ROS项目&#xff0c;实现hello,world打印&#xff0c;在此基础上进行功能开发。 步骤1&#xff1a;创建工作空间&#xff1a; mkdir -p ros_workspace/src cd ros_workspace对工作空间进行初始化&#xff1a; catkin_make source devel/setup.…

20.【C语言】初识结构体(重要)

定义&#xff1a;由一批数据组合而成的结构型数据 作用&#xff1a;描述复杂对象&#xff0c;创建新的类型 格式&#xff1a; struct 对象 { …… } 介绍. 用法&#xff1a;结构体变量.成员变量 #define _CRT_SECURE_NO_WARNINGS 1 #include <stdio.h> struct hotal…

代码随想录训练营Day57

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、X的平方根二、有效的完全平方数 前言 提示&#xff1a;这里可以添加本文要记录的大概内容&#xff1a; 今天是跟着代码随想录刷题的第57天&#xff0c;继…

Prompt-Free Diffusion: Taking “Text” out of Text-to-Image Diffusion Models

CVPR2024 SHI Labshttps://arxiv.org/pdf/2305.16223https://github.com/SHI-Labs/Prompt-Free-Diffusion 问题引入 在SD模型的基础之上&#xff0c;去掉text prompt&#xff0c;使用reference image作为生成图片语义的指导&#xff0c;optional structure image作为生成图片…

安装Linux虚拟机

点击创建新的虚拟机 选择高级 系统自定义推荐 选择稍后安装 选择Linux 虚拟机命名并且选择创建位置 系统自定义 系统自定义推荐 系统自定义推荐 选择安装好的iOS文件 点击完成 选择编辑虚拟机设置 进入后选择第一个Install red hat enterprise 选择常用语言 设置…

2024.8月28号杭州电商博览会,在杭州国博举办

2024杭州电商新渠道博览会暨集脉电商节 时间&#xff1a;2024年08月28-30日 地点&#xff1a;杭州国际博览中心&#xff08;G20&#xff09; 主办单位&#xff1a;浙江集脉展览有限公司、杭州华维展览有限公司 承办单位&#xff1a;浙江集脉展览有限公司 报名参展&#xf…

测试几个 ocr 对日语的识别情况

测试几个 ocr 对日语的识别情况 1. EasyOCR2. PaddleOCR3. Deepdoc&#xff08;识别pdf中图片&#xff09;4. Deepdoc&#xff08;识别pdf中文字&#xff09;5. Nvidia neva-22b6. Claude 3.5 sonnet 识别图片中的文字7. Claude 3.5 sonnet 识别 pdf 中表格8. OpenAI gpt-4o 识…

网页计算器的实现

简介 该项目实现了一个功能完备、交互友好的网页计算器应用。只使用了 HTML、CSS 和 JavaScript &#xff0c;用于检验web前端基础水平。 开发环境&#xff1a;Visual Studio Code开发工具&#xff1a;HTML5、CSS3、JavaScript实现效果 功能设计和模块划分 显示模块&#…

Bean类的设计规范:Bean规范

Bean规范 类要求必须含有无参&#xff0c;公共的构造方法属性必须私有化&#xff0c;然后提供公共的 set 和 get 方法

anaconda命令大全

目录 查看所有虚拟环境查看某虚拟环境安装的包创建虚拟环境激活创建好的虚拟环境回到之前的环境删除创建的虚拟环境查看conda所在的位置、虚拟环境位置等信息conda修改虚拟环境所在的位置 查看所有虚拟环境 conda env list查看某虚拟环境安装的包 激活要查看的虚拟环境之后&a…

Android 性能优化之启动优化

文章目录 Android 性能优化之启动优化启动状态冷启动温启动热启动 耗时检测检测手段TraceView使用方式缺点 Systrace环境配置使用方式TraceView和Systrace比较 AOP统计耗时环境配置使用 优化白屏优化异步加载优化环境配置使用 延迟加载优化AppStartup 源码下载 Android 性能优化…

Reid系列论文学习——无人机场景下基于 Transformer 的轻量化行人重识别

今天介绍的一篇论文是针对无人机场景下的行人重识别&#xff0c;论文题目为&#xff1a;"无人机场景下基于 Transformer 的轻量化行人重识别"。该论文针对无人机场景下行人呈现多角度多尺度的特点、以及传统CNN网络在行人重识别任务中受限于感受野和下采样导致的无法…

力扣1895.最大的幻方

力扣1895.最大的幻方 求前缀和暴力枚举幻方边长 求行列前缀和 class Solution {public:int largestMagicSquare(vector<vector<int>>& grid) {int n grid.size() , m grid[0].size();vector<vector<int>> rowsum(n,vector<int>(m));for…

关于汽车软件测试的几点想法

如果你有过汽车行业的从业经验&#xff0c;你就应该知道&#xff0c;过去汽车行业只做测试&#xff0c;而不做开发。汽车制造商的主要任务&#xff08;从工程角度看&#xff09;是将来自数百家供应商的数千个零部件组装在一起。考虑到现代软件的复杂性和客户的“挑剔”&#xf…