原文:我的個人博客
原題鏈接
考點
圖的遍歷,廣度優先遍歷
思路
簡單的廣搜就可以解決。在廣搜的過程中記錄所在的層次。
代碼
#include <bits/stdc++.h>
using namespace std;
vector<int> net[10010];
bool visit[10010];
int n,L,k,tmp;
int cnt=0;
struct node{
int key;
int layer;
};
void bfs(int root){
queue<node>q;
q.push(node{root,0});
int layer=L;
visit[root] = true;
while(!q.empty()){
node now = q.front();
q.pop();
for(int i=0;i<net[now.key].size();i++){
if(visit[net[now.key][i]]==false&&now.layer<L){
q.push(node{net[now.key][i],now.layer+1});
visit[net[now.key][i]]=true;
cnt++;
}
}
}
}
int main(){
cin>>n>>L;
for(int i=1;i<=n;i++){
cin>>k;
for(int j=0;j<k;j++){
cin>>tmp;//ta
net[tmp].push_back(i);
}
}
int q;
cin>>q;
for(int i=0;i<q;i++){
cin>>tmp;
fill(visit,visit+10010,false);
cnt=0;
bfs(tmp);
cout<<cnt<<endl;
}
}