PAT A 1076 Forwards on Weibo (30 分)

一、题目概述

给定N个用户及用户间的关注网络,统计给定用户L层以内的关注者及间接关注者。

二、思路

邻接表有向图存储,BFS访问方式为逐层扩散,使用BFS遍历给定用户L层内的关注者。

注意:不能使用DFS,DFS深度优先访问,若两顶点间路径有多条,可能会出现由较远的一条路径访问,因距离限制不可达同时阻断了其他较短路的情况。

三、代码

#include 
#include 
#include 
using namespace std;
int main()
{
    int N, L, K;
    vector<vector<int>> G(1001);
    scanf("%d %d", &N, &L);
    for( int i = 1, M; i <= N; ++i )
    {
        scanf("%d", &M);
        for( int j = 0, user; j < M; ++j )
        {
            scanf("%d", &user);
            G[user].push_back(i);
        }
    }
    scanf("%d", &K);
    for( int i = 0, v, cnt, lev, last; i < K; ++i )
    {
        scanf("%d", &v);
        lev = cnt = 0, last = v;
        vector<int> visited(1001, 0);
        queue<int> q;
        visited[v] = 1;
        q.push(v);
        while( q.size() && lev < L )
        {
            v = q.front();
            q.pop();
            for( int j = 0; j < G[v].size(); ++j )
                if( !visited[ G[v][j] ] )
                {
                    visited[ G[v][j] ] = 1;
                    q.push( G[v][j] );
                    ++cnt;
                }
            if( v == last )
            {
                last = q.back();
                ++lev;
            }
        }
        printf("%d\n", cnt);
    }
}


你可能感兴趣的:(PAT,A,PAT,A,PAT)