首页 > 学院 > 开发设计 > 正文

BIT2011年上机第三题

2019-11-06 06:49:16
字体:
来源:转载
供稿:网友

题目要求

解题思路

 刚开始我以为这道题很简单,只需要更具层次就可以找到领导关系,后来才意识到一个层次可能有多个人。

所以一定要找到它的直接领导,而直接领导又是离自己最近的上一层的一个人,所以可以根据这个思路来找到领导,

实际上有点取巧的性质,但是学以致用,能用方为王道,嘻嘻~~~

代码如下

#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;}


上一篇:mysql常用的sql语句

下一篇:Rx入门

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表