K12526 找双亲和孩子
今天讲一下找双亲和孩子这一题,我们先看一下题目
好,再看一下样例
这一题要用双亲孩子表示法,那么什么是双亲孩子表示法呢?下面来讲一下。
双亲孩子表示法:在结点存储中既包含一个指针域用来指向其双亲结点,同时有多个指向其孩子结点的指针(vector)。
struct node{
int p;
vector<int> c;
}tree[35];
输入的时候存一下数据。
for(int i=1;i<=m;i++){
int x,y;
cin>>x>>y;
int posx=a[x]-'A'+1,posy=a[y]-'A'+1;
tree[posy].p=posx;//双亲
tree[posx].c.push_back(posy);//孩子
}
来看一下完整代码吧:
#include<bits/stdc++.h>
using namespace std;
struct node{
int p;
vector<int> c;
}tree[35];
char a[35];
int main()
{
int n,m,q;
cin>>n>>m>>q;
for(int i=1;i<=n;i++){
cin>>a[i];
}
for(int i=1;i<=m;i++){
int x,y;
cin>>x>>y;
int posx=a[x]-'A'+1,posy=a[y]-'A'+1;
tree[posy].p=posx;
tree[posx].c.push_back(posy);
}
while(q--){
int x;
cin>>x;
int posx=a[x]-'A'+1;
if(tree[posx].p==0) cout<<"#"<<" ";
else cout<<char(tree[posx].p+'A'-1)<<" ";
if(tree[posx].c.empty()) cout<<"@";
else{
for(int i=0;i<tree[posx].c.size();i++)
cout<<char(tree[posx].c[i]+'A'-1)<<" ";
}
cout<<endl;
}
return 0;
}
如有错误请及时指出,谢谢观看,拜拜~