请问各位一个问题:
有以下几组数:
0 5,
1 7,
3 4,
3 6,
5 6,
7 2
请问如何实现归类?即把相关联的数据分在一起
0 3 4 5 6 为一类
1 2 7 为一类
急用!!!请高手能给个c程序,谢谢!
#include <stdio.h>
typedef struct
{
int num;
int flag;
int tag;
}tosort;
int n;/*数组个数*/
/*
函数入口:数组,数组中操作数排列号,第几类。
*/
void dosort(tosort *memo,int i,int k)
{
int p,j;
if(i==2*n-1||i==2*n-2)
{
p=i%2?i-1:i+1;
memo[i].flag=memo[p].flag=k;
memo[i].tag=memo[p].tag=1;
}
else
{
p=i%2?i-1:i+1;
memo[i].flag=memo[p].flag=k;
memo[i].tag=memo[p].tag=1;
for(j=0;j<2*n;j++)
{
if(memo[j].tag==1)
continue;
else
if(memo[j].num==memo[i].num||memo[j].num==memo[p].num)
dosort(memo,j,k);
}
}
}
int main()
{
tosort *memo=NULL;
int i,j=1,k=1,m=0,q;
int a[30]={0};
printf("input the number of groups:\n");
scanf("%d",&n);
memo=(tosort *)calloc(2*n,sizeof(tosort));
for(i=0;i<2*n;i++)
{
memo[i].flag=0;
memo[i].tag=0;
}
printf("Now input the numbers:\n");
for(i=0;i<2*n;i++)
scanf("%d",&(memo+i)->num);
for(i=0;i<2*n;i+=2)
{
if(memo[i].tag==1)
continue;
else
dosort(memo,i,k++);
}
while(j<k)
{
for(i=0;i<2*n;i++)
{
if(memo[i].flag==j)
{
if(m)
for(q=0;q<m;q++)
{
if(memo[i].num==a[q])
goto go_on;
}
a[m++]=memo[i].num;
}
if(0) go_on:continue;
}
for(i=0;i<m;i++)
printf("%-6d",a[i]);
printf("\n");
j++;
m=0;
}
free(memo);
getch();
}
一道不错的题,用的却是最垃圾的办法,哎!
再想想有没有好的算法