PAT(A)1076 Forwards on Weibo
题目链接:https://pintia.cn/problem-sets/994805342720868352/problems/994805392092020736
题意:计算一个图中距离某个点k层以内的点的个数
思路:BFS计算层数
层数只能由上一层得到:next.layer=last.layer+1,并不是通过for循环的次数计数
代码:
#include<bits/stdc++.h>
using namespace std;
int n,k;
vector<int> edge[2005];
int a[1005];
int vis[2005]={0};
int len[2005]={0};
void bfs(int x){
queue<int> q;
memset(vis,0,sizeof(vis));
memset(len,0,sizeof(len));
vis[x]=1;//记录有没有加进队列过
q.push(x);
int ans=0;
while(q.size()){
int l=q.front();
q.pop();
if(len[l]>=k)break;
for(int i=0;i<edge[l].size();i++){
int ne=edge[l][i];
if(!vis[ne]){
q.push(ne);
vis[ne]=1;
len[ne]=len[l]+1;
ans++;
}
}
}
cout<<ans<<endl;
}
int main (){
cin>>n>>k;
int num,res;
for(int i=1;i<=n;i++){
cin>>num;
for(int j=0;j<num;j++){
cin>>res;
edge[res].push_back(i);
}
}
cin>>num;
for(int i=0;i<num;i++)cin>>a[i];
for(int i=0;i<num;i++){
bfs(a[i]);
}
return 0;
}

浙公网安备 33010602011771号