计算Ted后代的年龄并排序

第一次用结构,居然一次AC了,很爽。。

运用递归查找相应节点的上一代年龄,没有则再向上查

#include  < iostream >
#include 
< string >
#include 
< vector >
#include 
< cmath >
using   namespace  std;

struct  descedant 
{
    
char father[20];
    
char child[20];
    
int age;    //child的年龄
    int differ;
    
void init();
}
;

void  descedant::init()    // 初始化
{
    age
=0;
    differ
=0;
}


descedant des[
100 ];

void  getAge(descedant &  d, int  n)     // 递归计算出年龄
{
    
for (int j=0;j<n;j++)
    
{
        
if (strcmp(d.father,des[j].child)==0)
        
{
            
if (des[j].age==0)   //未计算则递归算上一代
            {
                getAge(des[j],n);
            }

                d.age
=des[j].age-d.differ;
                
break;
        }

    }

}


int  cmp( const   void *  a, const   void *  b)     // 排序,年龄从大到小,若年龄相同则按字典顺序
{
    descedant
* c=(descedant*)a;
    descedant
* d=(descedant*)b;
    
if (c->age==d->age)
      
return strcmp(c->child,d->child);
    
return d->age-c->age;
}

int  main()
{
   
int n,num,count=1;
   scanf(
"%d",&n);
   
while (n--)
   
{
       scanf(
"%d",&num);
       
int k=0;
       
for (int i=0;i<num;i++)
       
{
           des[k].init();
           scanf(
"%s %s %d",des[k].father,des[k].child,&des[k].differ);
           
if (strcmp(des[k].father,"Ted")==0)
           
{
               des[k].age
=100-des[k].differ;
           }

           k
++;
       }

       
for (int i=0;i<num;i++)
       
{
           
if (des[i].age==0)
           
{
               getAge(des[i],num);
           }

       }

       qsort(des,num,
sizeof(descedant),cmp);
       printf(
"DATASET %d\n",count++);
       
for (int i=0;i<num;i++)
       
{
           printf(
"%s %d\n",des[i].child,des[i].age);
       }

   }

}