1787: 生化危机
Description
X博士想造福人类, 研发一种可以再生肢体的药物, 可是很不幸......研究失败了, 他在蜥蜴身上实验的时候, 蜥蜴发生了变异, 更糟糕的是, 蜥蜴逃出了生化实验室.

恐怖的事情发生了, 疫情以X博士所在的城市为中心向四周扩散开, 最终, 整个地球上的城市都被感染了.假设整个地球一共有N个城市, 这N个城市是连通的, 有N-1条通道把他们连接起来.病毒会以一座城市为中心,在一天的时间内, 会把和他相连的周围的所有城市感染. 那么, 多少天的时间, 整个地球的城市都感染呢?

Input
 第一行输入一个T(T <= 50), 表示一共有T组测试数据. 每组数据第一行两个数n, k. n表示有n(2 <= n <= 10000)个城市, 代表城市1-n, k是X博士所在的城市. 接下来n-1行, 每行有两个数u, v, 表示城市u和v之间有一条通道.

Output
 每组数据第一行输出第一个数 x , 表示整个地球感染需要x天. 接下来 x 个数, 第i个数表示第i天感染了城市的数量. (注意, 每组数据第二行每个数据后边都有一个空格).

Sample Input
 2
3 1
1 2
2 3
3 2
1 2
2 3
Sample Output
 3
1 1 1
2
1 2

vector建图的bfs

#include<iostream>
#include<bits/stdc++.h>
#include<vector>
#include<queue>
#define maxn 10010
using namespace std;
struct city{int id;int day;
};
int n,k;
vector<int>mp[maxn];
queue<city>q;
int vis[maxn];
int ans[maxn];
int ANS;
void bfs(int k){while(!q.empty()){q.pop();}//初始化 memset(vis,0,sizeof(vis));q.push(city{k,1});vis[k]=1;while(!q.empty()){city c;c=q.front();q.pop();int nowid=c.id;int nowday=c.day;ANS=nowday;//队列中最后的值肯定对应着最晚的天数 ans[nowday]++;for(int i=0;i<(int)mp[nowid].size();i++){int next = mp[nowid][i];if(!vis[next]) {c.id=next,c.day=nowday+1;vis[next]=1;q.push(c);}}       }}
int main(){int T;cin>>T;while(T--){cin>>n>>k;int x,y;for(int i=1;i<=n;i++) mp[i].clear();for(int i=1;i<=n;i++)  ans[i]=0;for(int i=1;i<n;i++){//建边cin>>x>>y;mp[x].push_back(y);mp[y].push_back(x); }  bfs(k);cout<<ANS<<endl;for(int i=1;i<=ANS;i++) cout<<ans[i]<<' ';cout<<endl;  }return 0;
}

vector建图dfs

思路:用vector存储相连的结点,然后从起点开始搜索,对感染到的结点进行标记,然后在搜索过程中进行计数,DFS几次就是第几天+1

#include<vector>
#include<iostream>
#define INF 0x3f3f3f3f
using namespace std;
vector<int>map[MAXN];
int bz[MAXN];
int ans[MAXN];
void dfs(int v,int x)
{for(int i=0;i<map[v].size();i++){if(bz[map[v][i]]==0){bz[map[v][i]]=1;ans[x]++;dfs(map[v][i],x+1);}}
}
int main()
{int t,i;int n,m,q,w;scanf("%d",&t);while(t--){cin>>n>>m;memset(ans,0,sizeof(ans));memset(bz,0,sizeof(bz));for(i=1;i<=n;i++)map[i].clear();for(i=1;i<n;i++){scanf("%d%d",&q,&w);map[q].push_back(w);map[w].push_back(q);}bz[m]=1;dfs(m,2);int cnt=1;for(i=1;i<=n;i++) if(ans[i]) cnt++;printf("%d\n",cnt);printf("1 ");for(i=1;i<=n;i++) if(ans[i]) printf("%d ",ans[i]);printf("\n");}return 0;
}

链式前向星的bfs,我还没用惯链式前向星的存图方式

#include <iostream>
#include <queue>
#include <vector>
#include <map>using namespace std;
typedef long long LL;#define N 23110
#define INF 0x3f3f3f3f
#define PI acos (-1.0)
#define EPS 1e-8
#define met(a, b) memset (a, b, sizeof (a))struct node
{int x, step;
}sa, en;struct node1
{int u, v, next;
}edge[N];
int vis[N], head[N], ans[N], cnt, n, m, maxn;
void Init (){met (ans, 0);met (head, -1);cnt = 0;
}void addedge (int u, int v)
{edge[cnt].u = u;edge[cnt].v = v;edge[cnt].next = head[u];head[u] = cnt++;
}void BFS ()
{met (vis, 0);queue <node> que;que.push (sa);vis[m] = 1;ans[1]++;while (que.size ()){sa = que.front (); que.pop ();for (int i=head[sa.x]; i!=-1; i=edge[i].next){node q = (node){edge[i].v, sa.step+1};if (!vis[q.x]){maxn = max (maxn, q.step);vis[q.x] = 1;ans[q.step]++;que.push (q);}}}return;
}int main ()
{int t;cin>>t;while (t--){int u, v;Init ();maxn = -1;cin>>n>>m;for (int i=1; i<n; i++){scanf ("%d %d", &u, &v);addedge (u, v);addedge (v, u);}sa = (node){m, 1};BFS ();printf ("%d\n", maxn);for (int i=1; i<=maxn; i++)printf ("%d ", ans[i]);puts ("");}return 0;
}

zzuli 1787: 生化危机 (bfs与dfs)相关推荐

  1. zzuli 1787: 生化危机 (BFS)

    http://acm.zzuli.edu.cn/problem.php?id=1787 1787: 生化危机 Description X博士想造福人类, 研发一种可以再生肢体的药物, 可是很不幸... ...

  2. ZZULIOJ 1787 生化危机 (vector+DFS)

    1787: 生化危机 Time Limit: 1 Sec  Memory Limit: 128 MB Submit: 64  Solved: 19 SubmitStatusWeb Board Desc ...

  3. zzulioj 1787: 生化危机 (vector+dfs) 好题

    1787: 生化危机 Time Limit: 1 Sec  Memory Limit: 128 MB Submit: 70  Solved: 20 SubmitStatusWeb Board Desc ...

  4. 分别用BFS和DFS求给定的矩阵中“块”的个数

    目录 背景介绍 BFS实现 基本思想 获取相邻位置元素技巧 BFS函数 DFS实现 基本思想 DFS函数 完整代码 背景介绍 背景 给出一个mxn的矩阵,矩阵中的元素为0或1.称位置(x,y)与其上下 ...

  5. BFS和DFS优先搜索算法

    4.教你通透彻底理解:BFS和DFS优先搜索算法 作者:July  二零一一年一月一日 --------------------------------- 本人参考:算法导论  本人声明:个人原创,转 ...

  6. 利用BFS和DFS解决 LeetCode 130: Surrounded Regions

    问题来源 此题来源于LEETCODE,具体问题详见下面的链接 https://leetcode.com/problems/surrounded-regions/description/ 问题简述 给定 ...

  7. 分享两个常见的搜索算法:BFS和DFS

    本文分享自华为云社区<BFS和DFS算法初探>,作者: ayin. 本次分享两个常见的搜索算法 1.BFS 即广度优先搜索 2.DFS 即深度优先搜索 岛屿数量 给定一个由 '1'(陆地) ...

  8. 【恋上数据结构】图代码实现、BFS、DFS、拓扑排序

    图代码实现 图的基础代码 顶点Vertex 边Edge 添加边addEdge 删除边removeEdge 删除点removeVertex 完整源码 图的遍历 广度优先搜索(Breadth First ...

  9. 如何通透理解:BFS和DFS优先搜索算法(23年修订版)

    前言 本文最早写于二零一一年一月一日,十余年过去,如今再看,之前写的确实一言难尽(包括评论区也有不少朋友指出文章质量.文章排版都有待提高),故重写本文 第一部分 什么是BFS与DFS 1.1 什么是B ...

最新文章

  1. pytroch 数据集 datasets DataLoader示例
  2. ngx_lua 金山项目 黄雀
  3. 抓球球的机器人应该怎么玩_闲鱼2019年应该怎么玩?闲鱼上面的几大规则
  4. server 2008 配置php mysql_Win2008 Server配置PHP环境
  5. 如何让ASP.NET默认的资源编程方式支持非.ResX资源存储
  6. async / await对异步的处理
  7. FPGA(2)--例化语句--1位全加器
  8. 阿里巴巴中文站架构设计实践(何崚)图书
  9. Github+docsify打造在线文档网站
  10. 工作流实战_28_flowable 任务多实例
  11. IDEA:IDEA采取debug的时候卡死-不报错
  12. mybatis select 返回值long null_Mybatis框架(二)
  13. 蓝桥杯 2016年C语言组大学B组 C/C++
  14. 【免费毕设】php+mysql社区交流系统(毕业论文+系统+说明书)
  15. Zephyr_overlay文件讲解
  16. 省地县级联操作 http://www.popub.net/script/pcas.html
  17. Linux驱动之异步OR同步,阻塞OR非阻塞概念介绍
  18. scratch---迷宫夺宝游戏实现,完整代码分享,多种地图与角色特效都有素材包!
  19. c语言单片机编程教学大纲,单片机应用技术[C语言]教学大纲.doc
  20. 老林学习笔记 :纯js 继承 闭包 与js实现继承原理 veu实现继承

热门文章

  1. 通过Android系统日志监听程序启动事件
  2. python teradata_使用Python连接Teradata
  3. 一步一步使用ABP框架搭建正式项目系列教程之本地化详解
  4. 项目管理 : 如何成为合格的项目经理
  5. 西北乱跑娃 --- python类方法重写
  6. 搭建mount服务(NFS服务器、客户端配置)
  7. Ubuntu的man手册中英文切换
  8. 从 SPA 到 PWA:Web App的下一站在哪?
  9. java检测服务器磁盘空间占满_Java性能检测工具-记录一次通过jstack排查Linux服务器CPU占用率很高的实践...
  10. QT_disconnect