目录

1,题目描述

题目描述

输入

2,思路

BFS算法

3,AC代码

4,解题过程

第一搏

第二搏


1,题目描述

Sample Input:

7 3
3 2 3 4
0
2 5 6
2 3 1
2 3 4
1 4
1 5
2 2 6

Sample Output:

4
5

题目描述

一个人的微博可以被许多人转发,给出每个粉丝关注的人(形成联系网络),限定间接转发的次数,输出最大转发数。

输入

  1. 第一行:N总人数,L限制层数;
  2. N行:每个粉丝关注的人;(不要搞混了!!!)
  3. 最后一行:K查询的数目,查询的编号;

2,思路

典型的BFS算法,需要注意记录每个节点所在的层数。

BFS算法

  1. 声明队列q;设置初始阶段u已访问visited[u]=true;int [level]记录层数;bool visited[]判断节点是否已访问;
  2. 将初始节点u入队;
  3. 当队列不为空时:1)队列头结点出队,并记录为u;2)遍历所有与u相邻、未被访问且u节点层次小于L的节点v,将其入队设置已访问更新节点v层次;

3,AC代码

参考这位大神的代码,解题过程中有大帮助!膜!@日沉云起【pat甲级1076. Forwards on Weibo (30)——BFS+DFS】

#include<bits/stdc++.h>
using namespace std;
int N, L, K;                //N用户数目 L传递层数 K查询数目
vector<int> graph[1002];    //有向图 存放消息的传播路径int bfs(int u){int amount = 0;         //传递的数量int level[N + 1] = {0}; //记录每个节点的层次bool visited[N + 1] = {false};queue<int> q;q.push(u);visited[u] = true;while(!q.empty()){u = q.front();q.pop();for(auto v : graph[u]){if(!visited[v] && level[u] < L){amount++;visited[v] = true;level[v] = level[u] + 1;    //节点v比节点u层数加一q.push(v);}}}return amount;
}
int main(){
#ifdef ONLINE_JUDGE
#elsefreopen("1.txt", "r", stdin);
#endif // ONLINE_JUDGEscanf("%d %d", &N, &L);int num, id;for(int i = 1; i <= N; i++){        //编号从1开始scanf("%d", &num);for(int j = 0; j < num; j++){scanf("%d", &id);graph[id].push_back(i);     //信息可以从id流向i}}scanf("%d", &num);for(int i = 0; i < num; i++){scanf("%d", &id);printf("%d\n", bfs(id));}return 0;
}

4,解题过程

第一搏

一看,这不就是有向图的DFS遍历(因为用DFS的次数比较多,形成了定势思维)吗?看我分分钟KO。。。

#include<bits/stdc++.h>
using namespace std;
int N, L, K;//N用户数目 L传递层数 K查询数目
bool graph[1002][1002];//有向图 存放消息的传播路径
bool visited[1002];
int amount;//传递的数量void dfs(int start, int depth){if(depth > L) return;visited[start] = true;amount++;for(int i = 1; i <= N && depth < L; i++){if(visited[i] == false && graph[start][i] == true)dfs(i, depth + 1);}
}
int main(){
#ifdef ONLINE_JUDGE
#elsefreopen("1.txt", "r", stdin);
#endif // ONLINE_JUDGEscanf("%d %d", &N, &L);int num, id;for(int i = 1; i <= N; i++){//编号从1开始scanf("%d", &num);for(int j = 0; j < num; j++){scanf("%d", &id);graph[id][i] = true;//信息可以从id流向i}}scanf("%d", &num);for(int i = 0; i < num; i++){scanf("%d", &id);fill(visited, visited + 1002, false);amount = -1;//将自己也加进去了 需要减一dfs(id, 0);cout<<amount<<endl;}return 0;
}

第二搏

Too young,too simple !

使用DFS会有一个隐蔽的错误:参考@日沉云起【pat甲级1076. Forwards on Weibo (30)——BFS+DFS】先膜为敬!

看到这里,果断弃坑,加入BFS阵营!

PAT_甲级_1076 Forwards on Weibo (30point(s)) (C++)【BFS/微博扩散】相关推荐

  1. PAT甲级1076 Forwards on Weibo (30 分) :[C++题解]图论、bfs

    文章目录 题目分析 题目来源 题目分析 来源:acwing 分析: BFS如何搜前k层?统计前k层的点数. ac代码 #include<bits/stdc++.h> using names ...

  2. PAT A级 1076 Forwards on Weibo (超详细BFS做法)

    一切杀不死我的,都将使我强大! 1076 Forwards on Weibo(30 分) Weibo is known as the Chinese version of Twitter. One u ...

  3. PAT甲级1124 Raffle for Weibo Followers :[C++题解]哈希表、微博转发抽奖

    文章目录 题目分析 题目来源 题目分析 来源:acwing 分析:开一个哈希表存已经中将的用户,避免重复发奖. 遍历所有m条姓名,从第一个中奖的开始,依次模拟即可. ac代码 #include< ...

  4. *PAT_甲级_1072 Gas Station (30point(s)) (C++)【Dijkstra/字符串截取/与数字相互转换】

    目录 1,题目描述 题目大意 注意: 2,思路 数据结构 算法 3,AC代码 4,解题过程 第一搏 第二搏 1,题目描述 Sample Input 1: 4 3 11 5 1 2 2 1 4 2 1 ...

  5. 【PAT甲级 - C++题解】1076 Forwards on Weibo

    ✍个人博客:https://blog.csdn.net/Newin2020?spm=1011.2415.3001.5343

  6. PAT_甲级 简单模拟

    A1006 Sign In and Sign Out (25) 简单模拟 原题 At the beginning of every day, the first person who signs in ...

  7. 1076 Forwards on Weibo

    1. 这题说的是,微博上人们之间有关注和被关注的关系,如果一个人发博,他的追随者就可能转发,追随者的追随者又可能转发,以此类推.现在给定一个人,求其微博可能被转发的人数,但是注意有一个关注链长的上限, ...

  8. **PAT_甲级_1057 Stack (30分) (C++)【字符串处理/栈的模拟/树状数组】

    目录 1,题目描述 题目大意 2,思路 数据结构 函数讲解 1,void update(int x, int v): 2,int getsum(int x): 3,void PeekMedian(): ...

  9. PAT_甲级_1002_C语言

    #include<stdio.h> #include<stdbool.h> int main() {int k , n;//数据个数以及下标数double a;//键入的数值d ...

最新文章

  1. html switch开关实现隐藏,css3实现switch开关效果
  2. java中hello类,Java入门篇-hello world
  3. model.train()和model.eval()
  4. 爬虫数据库一些简单的设计逻辑
  5. 计算机基础视频教程百度云,计算机应用基础视频教程
  6. 非标自动化PLC编程设计
  7. excel表转成PDF文档
  8. 计算机技术与软件专业技术资格(水平)考试
  9. linux下安装虚拟天文馆,如何在Ubuntu 18.04/17.10/16.04中安装Stellarium 0.17.0 虚拟天文馆...
  10. 20201227英语单词学习(仅供自己记录)
  11. 升压电路(Boost)的设计原理、参数计算及MATLAB仿真
  12. 华为ensp防火墙nat64案例配置
  13. 阿里巴巴计划今日中午推出1688.com批发网
  14. Mac本子下安装Maven的插件
  15. [Digital IC]RFID文献笔记
  16. Keil C51与MDK的合并
  17. 担心侵权?必备无版权素材网站分享,不用担心视频剪辑缺素材
  18. (三)Windows Server 2008 R2 无网卡驱动
  19. Learning Objectives
  20. emqx 使用端口_MQTT开发(一)-------EMQX Broker配置

热门文章

  1. 没有解决方案,不要瞎提建议
  2. 复古编程 cmd 编译 环境变量 可执行文件 path
  3. 面试官的哪些举动,暗示你将要通过?
  4. Python如何制作个性化的动态二维码
  5. 不缅怀C语言之父的果粉都不是真果粉
  6. c语言课设报告仓库管理系统,c语言课设仓库管理系统.doc
  7. 【杂项】任务管理器中的文件资源管理器不小心给结束任务了
  8. 计算机原理pcb板图,PCB电路板的电路原理图是什么
  9. 【多式联运】基于matlab帝国企鹅算法+遗传算法+粒子群算法求解不确定多式联运路径优化问题【含Matlab源码 2073期】
  10. java简单表白的情话_感动的表白情话 简单表白的话