一二三四五 上山打老虎

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;
}
posted @ 2021-03-01 21:18  黒川川  阅读(43)  评论(0)    收藏  举报