【最新】C语言代码模式识别——最大最小距离分类法.docx

上传人:b****9 文档编号:94273 上传时间:2022-10-02 格式:DOCX 页数:3 大小:14.42KB
下载 相关 举报
【最新】C语言代码模式识别——最大最小距离分类法.docx_第1页
第1页 / 共3页
【最新】C语言代码模式识别——最大最小距离分类法.docx_第2页
第2页 / 共3页
【最新】C语言代码模式识别——最大最小距离分类法.docx_第3页
第3页 / 共3页
亲,该文档总共3页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

【最新】C语言代码模式识别——最大最小距离分类法.docx

《【最新】C语言代码模式识别——最大最小距离分类法.docx》由会员分享,可在线阅读,更多相关《【最新】C语言代码模式识别——最大最小距离分类法.docx(3页珍藏版)》请在冰豆网上搜索。

【最新】C语言代码模式识别——最大最小距离分类法.docx

#include

#include

#defineC0.5

main(void)

{

intx[100][3],z[100][3],b[100];//x[][]输入点坐标z[][]:

标记第几个聚类中

心;w[][]用于标记各点到聚类中心距离最小值

inti,j,h,N,flag,k=1,f=1;//f:

聚类中心个数;b[]用于记录与聚类中心最大距离的

点标号;dd[][]:

在循环体中记录各点与聚类中心距离

floatw[100][100],dd[100][100],Q,max1,max2,distance[100];//distance[]:

记并求

出录第二个聚类点

b[0]=0;

printf("最大最小距离分类法\n\n");

printf("请输入坐标数N");

scanf("%d",&N);

printf("请输入各点的坐标:

\n");

for(i=0;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}}

scanf("%d",&x[i][j]);

}

printf("输入的点为\n");

for(i=0;i

{

printf("x%d:

",x[i][0]);

printf("{%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];

printf("\n取输入的第一个点为第一聚类中心

z%d:

{%d,%d}\n",x[0][0],x[0][1],x[0][2]);

for(i=0;i

{

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]));

printf("第%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;j<=N;j++)

{

if(distance[j]>max1)

{max1=distance[j];

flag=j;}

}

b[f]=flag;

printf("到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;

printf("阈值Q是%f\n",Q);

while(k!

=0)

{

for(j=0;j<=f;j++)

{

printf("各点到各聚类中心距离为\n");

for(i=0;i

{

for(j=0;j<=f;j++)

{

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]));

printf("%f",dd[i][j]);

}printf("\n");

}

}

for(i=0;i

{w[i][0]=dd[i][0];

for(j=0;j<=f;j++)

{

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;

}

printf("各坐标点到聚类中心最小距离是\n");

for(i=0;i

printf("%f\n",w[i][0]);

max2=w[0][0];

for(i=0;i

{

if(max2

{max2=w[i][0];

h=i;}

}

if(max2>Q)

{

f=f+1;

b[f]=h;

printf("\n由于到聚类中心距离中有比阈值大的新聚类中心产生");

printf("x%d:

{%d,%d}\n",h+1,x[h][1],x[h][2]);

}

else

{

printf("各坐标点到聚类中心距离均小于阈值%f,分类结束\n",Q);

k=0;

printf("一共产生%d类聚类中心\n",f+1);

for(i=0;i<=f;i++)

{printf("第%d类聚类中心包含坐标有",i+1);

for(j=0;j

{

if(w[j][2]==i)

{printf("x%d:

(%d,%d)",j+1,x[j][1],x[j][2]);}

}

printf("\n");

}

}

}

}

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 人文社科 > 法律资料

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1