我用C++编了一个K-MEDOIDS算法,有些问题,求大神帮忙看看~

#include <iostream>
#include <stdio.h>
#include <time.h>
using namespace std;

int a[100]={0};
int n=10;
int i=0,k=0;
int flag=0;
int juli(int a,int b)
{
return (a-b)*(a-b);
}
int paixu(int *a)
{
int i1=0;
int jh=0;
int m=0;
for(i1=0;i1<10;i1++)
{ if(a[i1]<a[i1+1] )
{ jh=a[i1];
a[i1]=a[i1+1];
a[i1+1]=jh;
}
else
m=i1+1;
}
return m;
}

int paixu2(int *a)
{
int i1=0;
int jh=0;
int m=0;
for(i1=0;i1<100;i1++)
{ if(a[i1]<a[i1+1] )
{ jh=a[i1];
a[i1]=a[i1+1];
a[i1+1]=jh;
}
else
m=i1+1;
}
return m;
}

void ql(int a[10][100])
{
int i,j;
for(i=0;i<10;i++)
for(j=0;a[i][j]!='/0';j++)
a[i][j]=0;
}

void zxjuli( int a[10][100],int *b)
{
int i2=0,j2=0,k2=0,l2;
int e[100];

for(i2=0;i2<10;i2++)
{

for(l2=0;e[l2]!='/0';l2++)
e[l2]=0;

for(j2=0;a[i2][j2]!='/0';j2++)

for(k2=0;a[i2][k2]!='/0';k2++ )
{
if(k2!=j2)
e[j2]+=juli(a[i2][j2],a[i2][k2]);
else
continue;
}
flag=paixu2(e);
b[i2]=a[i2][flag];
}
}

int b[10]={0};

int c[10][100]={0};
int j=0;
int d[10]={0};
int ax[100];
int main()
{
srand((unsigned)time(NULL));

int ix[10]={0};
for(i=0;i<10;i++)
ix[i]=1;

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

{ a[i]= 1+rand()%99;
ax[i]=a[i];
}
for(i=0;i<100;i++)
cout<<a[i]<<" ";
cout<<endl;
int t=0;

for(i=0;i<10;i++)
{
t=1+rand()%99; //随机选出10个中心
b[i]=a[t];
a[t]=-1;
}
for(i=0;i<10;i++)
c[i][0]=b[i];
for(i=0;i<100;i++)
if(a[i]!=-1)
{ for(k=0;k<10;k++)

{
d[i]=juli(a[i],b[k]);
flag=paixu(d);

}
c[flag][ix[flag]++]=a[i];
}

int ay[90];

for(j=0;j<100;j++)
{

for(i=0;i<10;i++)
ix[i]=1;
zxjuli(c,b);
int t=0;
for(i=0;i<100;i++)
{ for(k=0;k<10;k++)
{ if(ax[i]!=b[k])
flag=1;
else
{flag=0;
break;
}
}
if(flag==1)
ay[t++]=ax[i];
}

ql(c);
c[i][0]=b[i];
for(i=0;i<90;i++)
for(k=0;k<10;k++)

{ d[i]=juli(ay[i],b[k]);
flag=paixu(d);
c[flag][ix[flag]++]=a[i];
}

}
for(i=0;i<10;i++)
for(j=0;c[i][j]!='/0';j++)
cout<<i<<":"<<" "<<c[i][j]<<" ";
cout<<endl;

return 0;
}

第1个回答  推荐于2016-06-06
#include <iostream>
#include <stdio.h>
#include <time.h>
using namespace std;
int a[100]={0};
int n=10;
int i=0,k=0;
int flag=0;
int juli(int a,int b)
{
return (a-b)*(a-b);
}
int paixu(int *a)
{
int i1=0;
int jh=0;
int m=0;
for(i1=0;i1<10;i1++)
{ if(a[i1]<a[i1+1] )
{ jh=a[i1];
a[i1]=a[i1+1];
a[i1+1]=jh;
}
else
m=i1+1;
}
return m;//返回数组a中后项小于等于前项的个数
}

int paixu2(int *a)
{
int i1=0;
int jh=0;
int m=0;
for(i1=0;i1<100;i1++)
{ if(a[i1]<a[i1+1] )
{ jh=a[i1];
a[i1]=a[i1+1];
a[i1+1]=jh;
}
else
m=i1+1;
}
return m;
//返回后项小于等于前项的个数
}

void ql(int a[10][100])
{
int i,j;
for(i=0;i<10;i++)
for(j=0;a[i][j]!='\0';j++)
a[i][j]=0;
//为数组a整体赋值为0
}

void zxjuli( int a[10][100],int *b)
{
int i2=0,j2=0,k2=0,l2;
int e[100];

for(i2=0;i2<10;i2++)
{

for(l2=0;e[l2]!='\0';l2++)
e[l2]=0;//为数组e整体赋值为0

for(j2=0;a[i2][j2]!='\0';j2++)
{}//无意义的语句或者说是空语句

for(k2=0;a[i2][k2]!='\0';k2++ )
{
if(k2!=j2)//j2在上个for循环中的值有效作用域仅限于上个for循环的一对{}中
e[j2]+=juli(a[i2][j2],a[i2][k2]);
else
continue;
}
flag=paixu2(e);
b[i2]=a[i2][flag];
}
}

int b[10]={0};

int c[10][100]={0};
int j=0;
int d[10]={0};
int ax[100];
int main()
{
srand((unsigned)time(NULL));

int ix[10]={0};
for(i=0;i<10;i++)
ix[i]=1;

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

{ a[i]= 1+rand()%99;
ax[i]=a[i];
}
for(i=0;i<100;i++)
cout<<a[i]<<" ";
cout<<endl;
int t=0;

for(i=0;i<10;i++)
{
t=1+rand()%99; //随机选出10个中心
b[i]=a[t];
a[t]=-1;
}
for(i=0;i<10;i++)
c[i][0]=b[i];
for(i=0;i<100;i++)
if(a[i]!=-1)
{ for(k=0;k<10;k++)

{
d[i]=juli(a[i],b[k]);
flag=paixu(d);

}
c[flag][ix[flag]++]=a[i];
}

int ay[90];

for(j=0;j<100;j++)
{

for(i=0;i<10;i++)
ix[i]=1;
zxjuli(c,b);
int t=0;
for(i=0;i<100;i++)
{ for(k=0;k<10;k++)
{ if(ax[i]!=b[k])
flag=1;
else
{flag=0;
break;
}
}
if(flag==1)
ay[t++]=ax[i];
}

ql(c);
c[i][0]=b[i];
for(i=0;i<90;i++)
for(k=0;k<10;k++)

{ d[i]=juli(ay[i],b[k]);
flag=paixu(d);
c[flag][ix[flag]++]=a[i];
}

}
for(i=0;i<10;i++)
for(j=0;c[i][j]!='\0';j++)
cout<<i<<":"<<" "<<c[i][j]<<" ";
cout<<endl;

return 0;
}编写程序应该见名知意,力求同样功能的代码最简洁。你看看自己写的程序 for循环就不停的在嵌套 写的那么乱 编译虽然没问题仍然有几个bug,非正常中止。再好好改改吧 分数你爱给便给本回答被提问者采纳
相似回答