計算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);
}
}
}

第一次用結構,居然一次AC了,很爽。。
運用遞歸查找相應節點的上一代年齡,沒有則再向上查













































































































