这个题目是从正面推进的,比较简单能理解,只要去把结构体设计好,然后数组表示好久可以啦 

#include<iostream>
#include<string.h>
#include<stdio.h>
#include<algorithm>

using namespace std;

const int MAX = 100;

struct info
{
    char name[32];
    int age;
};struct info descent[MAX];

bool cmp(info a, info b) /* 降序排列 */
{
	if (a.age > b.age)
        return true;
	if (a.age == b.age && strcmp(a.name, b.name) < 0)
        return true;
	return false;
}


int main()
{

	char father[MAX][32];
	char son[MAX][32];
	int  year[MAX];

	int t, num = 0;
	cin >> t;
	while (t-- > 0)
	{
		int n;
        cin >> n;
		int i;
		for (i = 0; i < n; i++)
		{

			cin >> father[i] >> son[i] >> year[i];//读入数据
		}
		int j, k = 1, cur = 0;
		descent[0].age = 100;
        strcpy(descent[0].name, "Ted");//题目条件
		for (i = 0; i < n; i++, cur++)
		{
			if (cur >= k)
                break;
			for (j = 0; j < n; j++)
			{
				if (!strcmp(descent[cur].name, father[j]))//由一个父亲推儿子年龄
				{
					strcpy(descent[k].name, son[j]);
					descent[k].age = descent[i].age - year[j];
					k++;//指示下一个descent
				}
			}
		}
        sort(descent, descent + k, cmp);
		printf("DATASET %d\n", ++num);
		for (i = 1; i < k; i++)
			printf("%s %d\n", descent[i].name, descent[i].age);
	}
	return 0;
}