#include<stdio.h>
#include<stdlib.h>
#include<math.h>
void main()
{
float distance[51][51],min,x[50][51],y[50][51];
int num,cnum,i,j,t,n,m;
printf("请输入数据的个数:");
scanf("%d",&num);
for(i=0;i<num;i++) //数据输入
{
printf("请输入第%d组数据:\n",i+1);
printf("经度:");
scanf("%f",&x[i][0]);
x[i][1]=x[i][0];
printf("纬度:");
scanf("%f",&y[i][0]);
y[i][1]=y[i][0];
}
printf("请输入聚类的个数:");
scanf("%d",&cnum); //限定聚类个数
for(t=num;t>cnum;t--) //循环聚类
{
for(i=1;i<t;i++)
for(j=i+1;j<t+1;j++)
distance[i][j]=sqrt(pow((x[i][0]-x[j][0]),2)+pow((y[i][0]-y[j][0]),2));//两点距离
distance[i][j]=0;
for(i=0;i<t-1;i++) //判断最小值
for(j=i+1;j<t;j++)
if(distance[i][j]<min)
{
min=distance[i][j];
m=i;
n=j;
}
for(i=1;;i++) //合并数据
{
if(x[m][i]==0)
{
for(j=1;;j++)
{
if(x[n][j])
{
x[m][i]=x[n][j];
y[m][i]=y[n][i];
}
else
break;
}
}
}
x[m][0]=(x[m][0]+x[n][0])/2;
y[n][0]=(y[m][0]+y[n][0])/2;
for(i=0;i<=51;t++) //清除空行
{
x[m][i]=x[t][i];
y[m][i]=y[t][i];
}
}
for(i=0;i<=cnum;i++) //输出聚类结果
{
printf("第%d类:");
for(j=1;;j++)
if(x[i][j]!=0)
printf("(%f,%f)",x[i][j],y[i][j]);
else
break;
}
system("pause");
}
对数组的应用还有些问题,没来得及调试!
c语言实现AGNES分层聚类
最新推荐文章于 2021-05-24 10:32:57 发布