【最新】C语言代码模式识别——最大最小距离分类法Word格式文档下载.docx
《【最新】C语言代码模式识别——最大最小距离分类法Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《【最新】C语言代码模式识别——最大最小距离分类法Word格式文档下载.docx(3页珍藏版)》请在冰点文库上搜索。
//f:
聚类中心个数;
b[]用于记录与聚类中心最大距离的
点标号;
dd[][]:
在循环体中记录各点与聚类中心距离
floatw[100][100],dd[100][100],Q,max1,max2,distance[100];
//distance[]:
记并求
出录第二个聚类点
b[0]=0;
printf("
最大最小距离分类法\n\n"
);
请输入坐标数N"
scanf("
%d"
&
N);
请输入各点的坐标:
\n"
for(i=0;
i<
N;
i++)
x[i][0]=i+1;
//x[0[0]=1,x[1][0]=2...
for(j=1;
j<
=2;
j++)//x数组为三列数组其中第一列用来编号记录个点编号从1
开始x1,x2。
如x[3][3]={{1,0,0},{2,3,8},{3,2,2}}
x[i][j]);
}
输入的点为\n"
i++)//打印输出输入的点坐标
x%d:
"
x[i][0]);
{%d,%d}"
x[i][1],x[i][2]);
z[0][0]=x[0][0],z[0][1]=x[0][1],z[0][2]=x[0][2];
\n取输入的第一个点为第一聚类中心
z%d:
{%d,%d}\n"
x[0][0],x[0][1],x[0][2]);
i++)//循环计算各点到z1的距离
distance[i]=sqrt((x[i][1]-z[0][1])*(x[i][1]-z[0][1])+(x[i][2]-z[0][2])*(x[i]
[2]-z[0][2]));
第%d个点(%d,%d)到z%d(%d,%d)的距离
是%f\n"
(i+1),x[i][1],x[i][2],z[0][0],z[0][1],z[0][2],distance[i]);
max1=distance[0];
for(j=0;
=N;
j++)
if(distance[j]>
max1)
{max1=distance[j];
flag=j;
b[f]=flag;
到z%d{%d,%d}距离最远的点(既聚类点)是
(%d,%d)\n"
z[0][0],z[0][1],z[0][2],x[flag][1],x[flag][2]);
Q=C*max1;
阈值Q是%f\n"
Q);
while(k!
=0)
=f;
各点到各聚类中心距离为\n"
dd[i][j]=(float)sqrt((x[i][1]-x[b[j]][1])*(x[i][1]-x[b[j]][1])+(x[i][2]-x[b[
j]][2])*(x[i][2]-x[b[j]][2]));
%f"
dd[i][j]);
}printf("
i++)//找出各点到聚类中心距离的最小值
{w[i][0]=dd[i][0];
if(w[i][0]>
=dd[i][j])//if(w[i][0]>
dd[i][j]不对这样会导致最后打印不
出第一类的各点
{w[i][0]=dd[i][j];
w[i][2]=j;
w[i][1]=i;
各坐标点到聚类中心最小距离是\n"
printf("
%f\n"
w[i][0]);
max2=w[0][0];
if(max2<
w[i][0])
{max2=w[i][0];
h=i;
if(max2>
Q)
f=f+1;
b[f]=h;
\n由于到聚类中心距离中有比阈值大的新聚类中心产生"
h+1,x[h][1],x[h][2]);
else
各坐标点到聚类中心距离均小于阈值%f,分类结束\n"
k=0;
一共产生%d类聚类中心\n"
f+1);
{printf("
第%d类聚类中心包含坐标有"
i+1);
if(w[j][2]==i)
{printf("
(%d,%d)"
j+1,x[j][1],x[j][2]);
}