自己写的用c语言进行层次聚类算法,很简单的版本,

BigHDOG 2016-05-17 04:17:28
大二刚刚学数据仓库与数据挖掘,老师安排要我们写这个算法,用c语言写了一个,纯原创。。
# include<stdio.h>
# include<math.h>
main(){
int num,i,j,t,clear=0,place,count,numb; //Cnum //clear变量用于消除合并后的前一个集合书中第144页的第(3)步,count表示目前聚类个数,Cnum表示需要的聚类个数
float distance[50][50]; //distance[m][n]中,m表示第m个数,n表示第n个数,总体表示n与m的距离
int data[50],cluster[50][50],min;
printf("请输入数据项的个数:");
scanf("%d",&num);
for(i=0;i<num;i++){
printf("请输入第%d个数据:",i+1);
scanf("%d",&data[i]);
}
/*printf("请输入需要聚类的个数:");
scanf("%d",&Cnum);*///用于限定聚类个数的,日后再来搭建
for(i=0;i<num;i++)
cluster[i][0]=data[i];
for(i=0;i<num-1;i++){
for(j=0;j<num-(i+1);j++)
distance[i][j]=sqrt(pow((cluster[i][0]-cluster[j+i+1][0]),2));
} //这里以上是第一次聚类,每个元素作为一类,并计算距离
//在这里我发现不需要运用结构体,用二维数组就可以了的cluster[m][n]m表示第几个元素初始每一行只有一个元素,后面再慢慢累加上去
count=num;
printf("距离为:\n");
for(i=0;i<num-1;i++){ //输出距离
printf("其余元素与第%d个距离为:",i+1);
for(j=0;j<num-1;j++)
if(distance[i][j]>=0)
printf("%3.2f ",distance[i][j]);
putchar('\n');
} //这里以后开始层次聚类的核心,需要添加循环
for(t=0;t<num-1;t++){
numb=0;
min=distance[t][0];
place=0;
for(i=1;i<num-1;i++){
if(min>distance[t][i]&&distance[t][i]>=0){
min=distance[t][i];
place=i;
}
}
printf("第一行的最小值为:%d位置为%d\n",min,place+1);
while(cluster[t+place+1][numb]>=0)
numb++;
for(i=0;i<num;i++){

if(cluster[t][i]>=0)
cluster[t+place+1][numb++]=cluster[t][i];
} //合并有点问题
clear++;
count--;
for(i=clear;i<num;i++){
for(j=0;j<num;j++)
if(cluster[i][j]>=0)
printf("%d ",cluster[i][j]);
putchar('\n');
}
printf("目前聚类个数为:%d\n",count);
}
getchar();//暂停用
}



最后希望大家能给出意见,然后还有一个问题,最近在学习c++的mfc对话框程序设计,学到一个地方需要使用自定义信息的(就是“”查找/替换对话框“在文本中查找替换字符),不知道怎么弄,按着百度上的来一次以后运行程序有反应但是会报错。希望有大神帮我指点指点
...全文
885 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
小豆豆。 2018-07-04
  • 打赏
  • 举报
回复
请问怎么可以把他改成可以输入float或者double型的数值

33,311

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧