⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 moshi2.cpp

📁 先用C-均值聚类算法程序
💻 CPP
字号:
#include<iostream.h>
void main()
{
	int i,i1,i2,i3,m,n,z,d;
	double a,b,j;
	int c[20];
	double p[20];
	int x[20];
	int y[20];
	double xm[20];
	double ym[20];
	int x1[20][20];
	int y1[20][20];
	x[0]=0;x[1]=1;x[2]=0;x[3]=1;x[4]=2;x[5]=1;x[6]=2;x[7]=3;x[8]=6;x[9]=7;x[10]=8;
	x[11]=6;x[12]=7;x[13]=8;x[14]=9;x[15]=7;x[16]=8;x[17]=9;x[18]=8;x[19]=9;
	y[0]=0;y[1]=0;y[2]=1;y[3]=1;y[4]=1;y[5]=2;y[6]=2;y[7]=2;y[8]=6;y[9]=6;y[10]=6;
	y[11]=7;y[12]=7;y[13]=7;y[14]=7;y[15]=8;y[16]=8;y[17]=8;y[18]=9;y[19]=9;
	for(i=0;i<=19;i++)
	{
		z=0;
		for(i1=0;i1<20;i1++)
		{
			c[i1]=0;
			p[i1]=0;
			xm[i1]=0;
			ym[i1]=0;
			for(i2=0;i2<20;i2++)
			{
				x1[i1][i2]=0;
				y1[i1][i2]=0;
			}
		}
		for(i1=0;i1<=i;i1++)
		{
			x1[i1][0]=x[i1];
			y1[i1][0]=y[i1];
			c[i1]=1;
		}
		if(i!=19)//把剩余的坐标分到聚类里
		{
			for(i1=i+1;i1<20;i1++)
			{
				a=(x[i1]-x[0])*(x[i1]-x[0])+(y[i1]-y[0])*(y[i1]-y[0]);
				n=0;
				for(i2=0;i2<=i;i2++)
				{
					b=(x[i1]-x[i2])*(x[i1]-x[i2])+(y[i1]-y[i2])*(y[i1]-y[i2]);
					if(a>=b)
					{
						a=b;
						n=i2;
					}
				}
				c[n]=c[n]+1;
				m=c[n];
				x1[n][m-1]=x[i1];
				y1[n][m-1]=y[i1];
			}
		}
leap:
		for(i1=0;i1<=i;i1++)//求M直的横坐标
		{
			b=0;
			d=c[i1];
			for(i2=0;i2<d;i2++)
			{
				b=b+x1[i1][i2];
			}
			xm[i1]=b/d;
		}
		for(i1=0;i1<=i;i1++)//求M直的纵坐标
		{
			b=0;
			d=c[i1];
			for(i2=0;i2<d;i2++)
			{
				b=b+y1[i1][i2];
			}
			ym[i1]=b/d;
		}
		for(i1=1;i1<=i;i1++)
		{
			d=c[i1];
			if(d>=2)
			{
				for(i2=0;i2<d;i2++)
				{
					for(i3=0;i3<=i;i3++)
					{
						a=(x1[i1][i2]-xm[i3])*(x1[i1][i2]-xm[i3])+(y1[i1][i2]-ym[i3])*(y1[i1][i2]-ym[i3]);
						d=c[i3];
						p[i3]=a*d/(d+1);
					}
					a=(x1[i1][i2]-xm[i1])*(x1[i1][i2]-xm[i1])+(y1[i1][i2]-ym[i1])*(y1[i1][i2]-ym[i1]);
					d=c[i1];
					p[i1]=a*d/(d-1);
					
					
					for(i3=0;i3<=i;i3++)
					{
						if(p[i1]>=p[i3])
						{
							n=i3;
						}
					}
					if(n=!i1)
					{
						d=c[n];
						x1[n][d]=x1[i1][i2];
						y1[n][d]=y1[i1][i2];
						c[n]=c[n]+1;
						c[i1]=c[i]-1;
						goto leap;
					}
				}
			}
		}
		j=0;
		for(i1=0;i1<=i;i1++)
		{
			a=c[i1];
			for(i2=0;i2<a;i2++)
			{
				j=j+(x1[i1][i2]-xm[i1])*(x1[i1][i2]-xm[i1])+(y1[i1][i2]-ym[i1])*(y1[i1][i2]-ym[i1]);
			}
		}
		cout<<"当C="<<i+1<<"时,j="<<j<<endl;
		for(i1=0;i1<=i;i1++)
		{
			a=c[i1];
			cout<<"第"<<i1+1<<"类样本:"<<" ";
			for(i2=1;i2<=a;i2++)
			{
				cout<<"( "<<x1[i1][i2-1]<<" , "<<y1[i1][i2-1]<<" ) ";
			}
			cout<<endl;
		}
		cout<<endl;
    }
}



⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -