📄 谱系聚类发.cpp
字号:
#include<iostream.h>
#include<math.h>
#include<stdlib.h>
#define row 5 //矢量的个数
#define date 6 //每个矢量的样本个数
void main()
{
double c,save_distance[100],q,saveadress[100];
long sum=0,i,j,count,b,m,n=0,add_result,w=0,a[row][date],adress;
cout<<"******注意:"<<endl;
cout<<" 可以重新设定输入矢量的个数与每个矢量的样本数!"<<endl;
cout<<endl;
cout<<"输入矢量的个数:"<<row<<endl;
cout<<"输入每个矢量的样本个数:"<<date<<endl;
cout<<endl;
cout<<"请输入每个矢量的样本值:"<<endl;
/**********************************************************************************/
for(i=0;i<row;i++) //输入样本值
{
for(j=0;j<date;j++)
cin>>a[i][j];
cout<<";"<<endl;
cout<<endl;
if(i<row-1)
cout<<"please input another date:"<<endl;
}
cout<<"矢量的样本值输入完成!"<<endl;
/**********************************************************************************/
for(i=0;i<row;i++) //计算欧式距离
{for(m=i+1;m<row;m++)
{for(j=0;j<date;j++)
{b=a[i][j]-a[m][j];
b=b*b;
sum=b+sum;
adress=(i+1)*10+m+1;
}
c=pow(sum,0.5);
save_distance[n]=c;
saveadress[adress]=c; //把计算的各个距离存入相应的哪两个矢量序号所组成的
//saveadress中的地址中
n++;
sum=0;
}
}
/**********************************************************************************/
for(i=row-1;i>0;i--) //计算有多少个数要输出!
{w=w+i;
add_result=w;
}
/**********************************************************************************/
cout<<endl;
cout<<"欧氏距离计算结果输出:"<<endl;
for(n=0;n<w;n++)
cout<<save_distance[n]<<";"<<endl;
/**********************************************************************************/
count=w-1; //从小到大排序
while(count)
{
for(n=0;n<w-1;n++)
{
if(save_distance[n]>=save_distance[n+1])
{q=save_distance[n];
save_distance[n]=save_distance[n+1];
save_distance[n+1]=q;
}
}
w--; //内层排序起泡法的循环次数
count--; //外层循环次数
}
/**********************************************************************************/
w=add_result;
cout<<endl;
cout<<"矢量间欧氏距离计算后从小到大排序:"<<endl;
for(n=0;n<w;n++)
cout<<save_distance[n]<<";"<<endl;
/**********************************************************************************/
cout<<endl;
cout<<"聚类树从下到上结合方式 (矢量序号从1开始) :"<<endl;
for(i=0;i<w;i++)
{for(j=0;j<100;j++)
{if(save_distance[i]==saveadress[j])
{cout<<j<<";"<<endl;
saveadress[j]=-1.0;
}
}
}
}
/**********************************************************************************/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -