題目要求:

解題思路:
剛開始我以為這道題很簡單,只需要更具層次就可以找到領導關系,后來才意識到一個層次可能有多個人。
所以一定要找到它的直接領導,而直接領導又是離自己最近的上一層的一個人,所以可以根據這個思路來找到領導,
實際上有點取巧的性質,但是學以致用,能用方為王道,嘻嘻~~~
代碼如下:
#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;}
新聞熱點
疑難解答