题目要求:
解题思路:
刚开始我以为这道题很简单,只需要更具层次就可以找到领导关系,后来才意识到一个层次可能有多个人。
所以一定要找到它的直接领导,而直接领导又是离自己最近的上一层的一个人,所以可以根据这个思路来找到领导,
实际上有点取巧的性质,但是学以致用,能用方为王道,嘻嘻~~~
代码如下:
#include<iostream>#include<string>using namespace std;struct Node{ string name; int parent;//根节点 -1 int level; //结点的级别 根节点 -1};//按照规律找最近的父节点int search_parent(Node nodes[100],int level,int num){ for(int i=num-1;i>=0;i--){ if(nodes[i].level==level-1){ return i; } } return 0;}int main(){ string str; string name; Node nodes[100]; cout<<"输入字符串:"<<endl; cin>>str; cout<<"输入名称:"<<endl; cin>>name; string s; int p=0;//级别 int num = 0; for(int i=0;i<str.length();i++){ if(str[i]!='('&&str[i]!=')'&&str[i]!=','){ s=""; while(str[i]>='a'&&str[i]<='z') s+=str[i++]; i--; Node node; node.name=s; node.level = p; if(p==1){ node.parent=-1; }else{ node.parent = search_parent(nodes,p,num); } nodes[num]=node; num++; }else{ if(str[i]=='('){ p++; } if(str[i]==')'){ p--; } if(str[i]==','){ } } } for(i=0;i<num;i++){ cout<<i<<" "<<nodes[i].name<<" "<<nodes[i].level<<" "<<nodes[i].parent<<endl; } string rstr=name; int rnum=0; for(i=0;i<num;i++){ if(name==nodes[i].name){ rnum=nodes[i].parent; } } while(nodes[rnum].parent!=-1){ if(nodes[rnum].name!=name){ rstr = nodes[rnum].name+"<-"+rstr; } rnum = nodes[rnum].parent; } rstr = nodes[rnum].name+"<-"+rstr; cout<<rstr<<endl; return 0;}
新闻热点
疑难解答