题目1035:找出直系亲属
#include <stdio.h>
#include<algorithm>
using namespace std;
int parent[100],n,m,cnt1,cnt2; //全部定义成整型 :A-Z对应65~90的下标
int lookRelation1(char p,char q)
{
while(parent[p]!=-1){
if(parent[p]==q){ //q是指字符对应的数字
cnt1++;
return cnt1;
}
else{
p=parent[p];
cnt1++;
}
}
return (cnt1=0);
}
int lookRelation2(char p,char q)
{
while(parent[q]!=-1){
if(parent[q]==p){
cnt2++;
return cnt2;
}
else{
q=parent[q];
cnt2++;
}
}
return (cnt2=0);
}
void showRelation()
{
// printf("###%d---%d###\n",cnt1,cnt2);
int i;
if(cnt1==0&&cnt2==0)
printf("-\n");
else{
if(cnt1==1) //此处必须用if-else-else if才能完全准确控制!!!
printf("parent\n");
else if(cnt2==1)
printf("child\n");
else if(cnt1==2)
printf("grandparent\n");
else if(cnt2==2)
printf("grandchild\n");
// if(cnt1==3||cnt2==3)
// printf("great-grandparent\n");
else{
if(cnt1!=0&&cnt2==0){
for(i=0;i<cnt1-2;i++)
printf("great-");
printf("grandparent\n");
}
if(cnt2!=0&&cnt1==0){
for(i=0;i<cnt2-2;i++)
printf("great-");
printf("grandchild\n");
}
}
}
}
int main()
{
int i;
char a,b,c,d,e;
//freopen("G:\\in.txt", "r", stdin);
while(scanf("%d%d",&n,&m)!=EOF){
if(n==0&&m==0) break;
for(i='A';i<='Z';i++)
parent[i]=-1;
getchar();
for(i=0;i<n;i++){
scanf("%c%c%c",&a,&b,&c);
//printf("%c-%c-%c\n",a,b,c);
getchar();
if(b!='-')
parent[b]=a;
if(c!='-')
parent[c]=a;
//printf("***%c***\n",parent[c]);
}
for(i=0;i<m;i++){
scanf("%c%c",&d,&e);
//printf("%c-%c-\n",d,e);
getchar();
cnt1=0;cnt2=0;
lookRelation1(d,e);
lookRelation2(d,e);
showRelation();
}
}
return 0;
}