📄 csoures.c
字号:
#include<stdio.h>
#include<math.h>
main()
{
int flag=0; //循环判断开关;
int i,j,n;
float m[]={0,0,0,0,0,0,0,0,0,0};
int length[]={0,0,0,0,0,0,0,0,0,0};//类长度;
int t=0; //类长度传递因子;
int K; //种类数目寄存器;
int dl=0; //类别传递因子;
float Z[12][2]; //初始分类存贮器;
float X[12][2]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}; //分类寄存器;
float S[100][2]; //数据源存贮器;
float P[100][100][2]; //结果寄存器;
char c='a';
while(c!='q')
{
/*..........数据输入 ...........*/
for(i=0;i<100;i++)
{
S[i][0]=0;
S[i][1]=0;
}
printf("\nHELLO! Please input the numble of the data:\n");
scanf("%d",&n);
printf("Please input data\n");
for(i=0;i<n;i++)
{
for(j=0;j<2;j++)
{
if(j==0)
{
printf("S[%d]x=",i+1);
scanf("%f",&S[i][j]);
}
else
{
printf("S[%d]y=",i+1);
scanf("%f",&S[i][j]);
}
}
}
/*******************************算法过程***************************************/
printf("GOOD! Please input the number of the sorts(K<10):\n");
scanf("%d",&K);
for(i=0;i<K;i++) //定义前面K个数据为初始聚类中心;
{
Z[i][0]=S[i][0];
Z[i][1]=S[i][1];
}
again:
for(i=0;i<100;i++)
for(j=0;j<100;j++)
{
P[i][j][0]=0;
P[i][j][0]=0;
}
dl=0;
for(i=0;i<n;i++)
{
m[i]=(Z[0][0]-S[i][0])*(Z[0][0]-S[i][0])+(Z[0][1]-S[i][1])*(Z[0][1]-S[i][1]);//第n点到第1聚类中心的距离为初始距离;
}
for(i=0;i<n;i++)
{
for(j=0;j<K;j++)
{
if(((Z[j][0]-S[i][0])*(Z[j][0]-S[i][0])+(Z[j][1]-S[i][1])*(Z[j][1]-S[i][1]))<=m[i])//第i个点到第j个聚类中心的距离;
{
m[i]=(Z[j][0]-S[i][0])*(Z[j][0]-S[i][0])+(Z[j][1]-S[i][1])*(Z[j][1]-S[i][1]);
dl=j;
}
}
length[dl]+=1; //第j类的长度加一;
t=length[dl]-1;
P[dl][t][0]=S[i][0];
P[dl][t][1]=S[i][1];
}
/*************判断聚类中心**************/
for(i=0;i<12;i++)
{
X[i][0]=0;
X[i][1]=0;
}
for(i=0;i<K;i++) //计算新的聚类中心;
{for(j=0;j<length[i];j++)
{
X[i][0]+=P[i][j][0];
X[i][1]+=P[i][j][1];
}
X[i][0]=X[i][0]/length[i];
X[i][1]=X[i][1]/length[i];
}
for(i=0;i<K;i++)
{
if((X[i][0]!=Z[i][0])||(X[i][1]!=Z[i][1]))
{ flag=1; //循环判断因子;
Z[i][0]=X[i][0];
Z[i][1]=X[i][1];
}
}
if(flag==1)
{
flag=0;
for(i=0;i<K;i++) //长度初始化;
length[i]=0;
goto again;
}
/*******************************判断所属类,打印结果***************************************/
printf("the result of this learning is :\n");
for(i=0;i<K;i++)
{
printf("\nthe %dth class:\n",i);
for(j=0;j<length[i];j++)
{
printf("(%f, %f) ",P[i][j][0],P[i][j][1]);
}
}
printf("\nYou did a good job ,press any key to continue");
printf("\npress 'q' to quit!! thank you !!");
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -