本文主要是介绍九度1035 -树 - 找出直系亲属,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
这道题目一开始我还以为是并查集,后来发现比并查集简单的多,就是一个家谱树,然后找到两个节点之间的深度差。
#include<stdio.h>
int data[30];void make_set(){for(int i=0;i<30;i++)data[i]=-1;
}int find(int a,int b){int re=1;while(data[a]!=-1){if(data[a]==b)return re;a=data[a];re++;}return -1;
}
int main(){int n,m;char a[4];while(scanf("%d %d",&n,&m)){if(m==0&&n==0)break;make_set();for(int i=0;i<n;i++){scanf("%s",a);data[a[1]-'A']=data[a[2]-'A']=a[0]-'A';}for(int i=0;i<m;i++){scanf("%s",a);int x=find(a[0]-'A',a[1]-'A');int y=find(a[1]-'A',a[0]-'A');int re = x>y?x:y;if(re<=0){printf("-\n");}else{if(x>0){if(re==1)printf("parent\n");else{for(int i=2;i<re;i++){printf("great-");}printf("grandparent\n");}}else if(y>0){if(re==1)printf("child\n");else{for(int i=2;i<re;i++){printf("great-");}printf("grandchild\n");}}}}}return 0;
}
这篇关于九度1035 -树 - 找出直系亲属的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!