PAT 1076

来源:互联网 发布:怎么关闭软件网络禁用 编辑:程序博客网 时间:2024/06/14 10:40

1076. Forwards on Weibo (30)

关键是读懂题目,然后用图的广度遍历即可。

比如sample里的
7 33 2 3 402 5 62 3 12 3 41 41 52 2 6
用户1关注了3个人:2 3 4,因此可以转发2,3, 4的微博。

#include <stdio.h>#define N 1001void BFS(int path[][N], int n, int s, int deep, int *e);int main(){        int followers[N][N];        int n, l;        int m, i, j, k;        int each[N];    // every users's followers in deep l        scanf("%d %d", &n, &l);        for (i = 1; i <= n; ++i)        {                for (j = 1; j <= n; ++j)                {                        followers[i][j] = 0;                }        }        // get each user's followers        for (i = 1; i <= n; ++i)        {                scanf("%d", &m);                for (j = 0; j < m; ++j)                {                        scanf("%d", &k);                        followers[k][i] = 1;    // i follows k, so i can foward k's message                }        }        for (i = 1; i <= n; ++i)        {                BFS(followers, n, i, l, each);        }        scanf("%d", &m);        for (j = 0; j < m; ++j)        {                scanf("%d", &k);                printf("%d\n", each[k]);        }        return 0;}void BFS(int path[][N], int n, int s, int deep, int *e){        int visited[N];        int queue[N];        int front = 0, rear = 1;        int prerear;        int i, j, k;        int level = 1;        int count = 0;        for (i = 1; i <= n; ++i)        {                visited[i] = 0;        }        visited[s] = 1;        queue[front] = s;        while(front < rear)        {                prerear = rear;                ++ level;                while(front < prerear)                {                        j = queue[front++];                        for (k = 1; k <= n; ++k)                        {                                if (visited[k] == 0 && path[j][k])                                {                                        visited[k] = 1;                                        ++ count;                                        queue[rear++] = k;                                }                        }                }                if (level > deep)                        break;        }        e[s] = count;}


0 0
原创粉丝点击