题解 | 找出直系亲属

找出直系亲属

https://www.nowcoder.com/practice/2c958d09d29f46798696f15ae7c9703b

#include<iostream>
#include<stdio.h>
#include<vector>
#include<map>
using namespace std;
vector<vector<char> >tree(26);
map<char,int>mp={{'A',0},{'B',1},{'C',2},
                 {'D',3},{'E',4},{'F',5},
                 {'G',6},{'H',7},{'I',8},
                 {'J',9},{'K',10},{'L',11},
                 {'M',12},{'N',13},{'O',14},
                 {'P',15},{'Q',16},{'R',17},{'S',18},
                 {'T',19},{'U',20},{'V',21},{'W',22},
                 {'X',23},{'Y',24},{'Z',25}};
int flag=-1;
bool isok=false;
void find(char a,char b,int depth){
    if(tree[mp[a]].size()==0||isok){
        return;
    }
    for(int i=0;i<tree[mp[a]].size();i++){
        char key=tree[mp[a]][i];
        if(key==b){
            flag=depth;
            isok=true;
            break;
        }
        else{
            find(key,b,depth+1);
        }
    }
}
int main(){
    int n,m;
    int i;
    char a,b,c;
    char s,t;
    cin>>n>>m;
 //   node tree[26];
    for(i=0;i<25;i++){
        tree[i].clear();
    }
    for(i=0;i<n;i++){
        getchar();
        cin>>a>>b>>c;
        if(b!='-') {
            tree[mp[a]].push_back(b);
        }
        if(c!='-'){
            tree[mp[a]].push_back(c);
        }
    }
    for(i=0;i<m;i++){
        getchar();
        cin>>s>>t;
        find(s,t,0);
        if(flag!=-1){
            if(flag==0){
                cout<<"child"<<endl;
            }
            else if(flag==1){
                cout<<"grandchild"<<endl;
            }
            else{
                for(int j=0;j<flag-1;j++){
                    cout<<"great-";
                }
                cout<<"grandchild"<<endl;
            }
        }
        else{
            find(t,s,0);
            if(flag!=-1){
                if(flag==0){
                    cout<<"parent"<<endl;
                }
                else if(flag==1){
                    cout<<"grandparent"<<endl;
                }
               else{
                   for(int j=0;j<flag-1;j++){
                       cout<<"great-";
                   }
                   cout<<"grandparent"<<endl;
               }
            }
            else{
                cout<<"-"<<endl;
            }
        }
        flag=-1;
        isok=false;
    }
    return 0;
}

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务