帮我写一个关于聚类的代码,要求使用C++
时间: 2023-08-28 18:19:29 浏览: 75
好的,下面是一个简单的聚类代码示例,使用C++语言实现:
```C++
#include<iostream>
#include<cmath>
#include<cstdio>
#include<cstdlib>
#include<algorithm>
using namespace std;
const int MAXN = 1005;
struct Point{
double x, y; // 坐标
int index; // 编号
bool operator < (const Point& a) const{
return index < a.index;
}
}p[MAXN];
int n, k, vis[MAXN], cnt;
double dist(Point a, Point b){
double dx = a.x - b.x, dy = a.y - b.y;
return sqrt(dx * dx + dy * dy);
}
void dfs(int u){
vis[u] = cnt;
for(int i = 1; i <= n; i++){
if(!vis[i] && dist(p[u], p[i]) <= k){
dfs(i);
}
}
}
int main(){
scanf("%d%d", &n, &k);
for(int i = 1; i <= n; i++){
scanf("%lf%lf", &p[i].x, &p[i].y);
p[i].index = i;
}
for(int i = 1; i <= n; i++){
if(!vis[i]){
cnt++;
dfs(i);
}
}
sort(p + 1, p + 1 + n);
for(int i = 1; i <= n; i++){
printf("%d ", vis[p[i].index]);
}
return 0;
}
```
这个代码实现了一个简单的基于距离阈值的聚类算法,将距离小于 `k` 的点看作属于同一个聚类。
阅读全文