题面:https://www.luogu.org/problemnew/show/P1332

很容易看出,这是一个典型的广度优先搜索,也就是众多OIer口中的bfs。

先给各位普及一下bfs(部分来自百度):

广度优先搜索(Breadth-First Search),又称作宽度优先搜索,或横向优先搜索,简称bfs,是一种基础算法。简单的说,BFS是从根节点开始,沿着树的宽度遍历树的节点,如果发现目标,则演算终止。广度优先搜索的实现一般采用队列。

其实,广度优先搜索是搜索算法的基础,想要成为一名优秀的OIer,广度优先搜索和深度优先搜索都是必须掌握的!

此题告诉了我们有A个感染源,B个领主,我们可以定义一个vis数组,若当前坐标的vis值为1,那么此处就没有被感染;否则,当前坐标就已被感染。

我们可以首先用bfs算出每个坐标被感染的时间,最后直接输出领主被感染的时间即可。

话不多说,上代码:

#include<bits/stdc++.h>//万能头文件
using namespace std;//开启标准名字空间
struct Node
{
int x,y,Time;//x为横坐标,y为纵坐标,Time为被感染时间
} s[];//设置结构体数组维护队列
int head,tail;//分别为头指针、尾指针
int n,m,a,b,vis[][],c[],d[],e,f,i,j,
k;//vis的意义同分析,c数组和d数组为感染源坐标,e、f为领主坐标
int P[][];//每个坐标被感染时间
void bfs() //开始bfs
{
tail=;
head=;//初始化指针
for(i=; i<=a; i++) //先把已知条件加入队列,并初始化时间
{
s[++tail].x=c[i];//相当于tail++,s[tail].x=c[i]
s[tail].y=d[i];
s[tail].Time=;
P[c[i]][d[i]]=;
}
while(head<tail) //如果队列中还有元素
{
head++;//头指针加1
int h=s[head].x,r=s[head].y,tmp=s[head].Time;//取出队首元素
if(h+<=n && vis[h+][r]==) //往右扩展,若合法加入队列
{
s[++tail].x=h+;//更新x坐标
s[tail].y=r;//更新y坐标
P[h+][r]=s[tail].Time=tmp+;//更新时间
vis[h+][r]=;//记录为已被感染
}
//以下每步操作意义同上
if(h->= && vis[h-][r]==) //往左扩展,若合法加入队列
{
s[++tail].x=h-;
s[tail].y=r;
P[h-][r]=s[tail].Time=tmp+;
vis[h-][r]=;
}
if(r+<=m && vis[h][r+]==) //往上扩展,若合法加入队列
{
s[++tail].x=h;
s[tail].y=r+;
P[h][r+]=s[tail].Time=tmp+;
vis[h][r+]=;
}
if(r->= && vis[h][r-]==) //往下扩展,若合法加入队列
{
s[++tail].x=h;
s[tail].y=r-;
P[h][r-]=s[tail].Time=tmp+;
vis[h][r-]=;
}
}
}
int main()
{
scanf("%d%d%d%d",&n,&m,&a,&b);//输入矩阵大小、感染源个数和领主个数
for(i=; i<=a; i++)
{
scanf("%d%d",&c[i],&d[i]);//输入感染源坐标
vis[c[i]][d[i]]=;//记录为已被感染
}
bfs();//遍历每个坐标被感染的时间
for(i=; i<=b; i++)
{
scanf("%d%d",&e,&f);//输入领主坐标
printf("%d\n",P[e][f]);//直接输出被感染时间
}
return ;//结束
}

有些人直接枚举每一个领主和感染源,求他们曼哈顿距离,但在矩阵过大时会TLE,所以bfs总是比暴力好的。

题解 【洛谷P1332】血色先锋队的更多相关文章

  1. 洛谷 P1332 血色先锋队

    P1332 血色先锋队 题目描述 巫妖王的天灾军团终于卷土重来,血色十字军组织了一支先锋军前往诺森德大陆对抗天灾军团,以及一切沾有亡灵气息的生物.孤立于联盟和部落的血色先锋军很快就遭到了天灾军团的重重 ...

  2. P1332 血色先锋队

    P1332 血色先锋队 题目描述 巫妖王的天灾军团终于卷土重来,血色十字军组织了一支先锋军前往诺森德大陆对抗天灾军团,以及一切沾有亡灵气息的生物.孤立于联盟和部落的血色先锋军很快就遭到了天灾军团的重重 ...

  3. 题解 洛谷P5018【对称二叉树】(noip2018T4)

    \(noip2018\) \(T4\)题解 其实呢,我是觉得这题比\(T3\)水到不知道哪里去了 毕竟我比较菜,不大会\(dp\) 好了开始讲正事 这题其实考察的其实就是选手对D(大)F(法)S(师) ...

  4. 题解 洛谷 P3396 【哈希冲突】(根号分治)

    根号分治 前言 本题是一道讲解根号分治思想的论文题(然鹅我并没有找到论文),正 如论文中所说,根号算法--不仅是分块,根号分治利用的思想和分块像 似却又不同,某一篇洛谷日报中说过,分块算法实质上是一种 ...

  5. 题解-洛谷P5410 【模板】扩展 KMP(Z 函数)

    题面 洛谷P5410 [模板]扩展 KMP(Z 函数) 给定两个字符串 \(a,b\),要求出两个数组:\(b\) 的 \(z\) 函数数组 \(z\).\(b\) 与 \(a\) 的每一个后缀的 L ...

  6. 题解-洛谷P4229 某位歌姬的故事

    题面 洛谷P4229 某位歌姬的故事 \(T\) 组测试数据.有 \(n\) 个音节,每个音节 \(h_i\in[1,A]\),还有 \(m\) 个限制 \((l_i,r_i,g_i)\) 表示 \( ...

  7. 题解-洛谷P4724 【模板】三维凸包

    洛谷P4724 [模板]三维凸包 给出空间中 \(n\) 个点 \(p_i\),求凸包表面积. 数据范围:\(1\le n\le 2000\). 这篇题解因为是世界上最逊的人写的,所以也会有求凸包体积 ...

  8. 题解-洛谷P4859 已经没有什么好害怕的了

    洛谷P4859 已经没有什么好害怕的了 给定 \(n\) 和 \(k\),\(n\) 个糖果能量 \(a_i\) 和 \(n\) 个药片能量 \(b_i\),每个 \(a_i\) 和 \(b_i\) ...

  9. 题解-洛谷P5217 贫穷

    洛谷P5217 贫穷 给定长度为 \(n\) 的初始文本 \(s\),有 \(m\) 个如下操作: \(\texttt{I x c}\),在第 \(x\) 个字母后面插入一个 \(c\). \(\te ...

  10. 题解 洛谷 P2010 【回文日期】

    By:Soroak 洛谷博客 知识点:模拟+暴力枚举 思路:题目中有提到闰年然后很多人就认为,闰年是需要判断的其实,含有2月29号的回文串,前四位是一个闰年那么我们就可以直接进行暴力枚举 一些小细节: ...

随机推荐

  1. 【WCF Restful】Post传参示范

    1.传多个参数 接口定义:(ResponseFormat与RequestFormat分别将相应参数序列化.请求参数反序列化) [OperationContract] [WebInvoke(UriTem ...

  2. centos7网卡启动不了

    网上查了很多资料了解网卡启动不了的原因,今天总结一下几种网卡启动不了的解决方案,以备参考. systemctl restart network         //重启网卡 返回报错: Restart ...

  3. 英语语法 ( Spoken language )

    - - - -------------- 1,五个语序: 主语+谓语(中英语序一致)主语+系动词+表语 (中英语序一致)主语+谓语+宾语(中英语序一致)主语+谓语+间宾+直宾(中英语序一致)主语+谓语 ...

  4. jQuery - lable 取值、赋值

    取值 var val = $("#breakfastMonday").html(); 赋值 $("#breakfastMonday").html("v ...

  5. Python 3.8 已发布,现在是切换至新版本的好时机吗?

    Python 3.8 已于前两周正式发布,不过目前大多数开发者主要使用的仍是 Python 3.7.x 或更旧的版本. ! 事实上,立刻切换到使用 Python 3.8 可能会引发一些问题.想知道何时 ...

  6. Java连载75-StringBuffer和StringBuilder

    一.StringBuffer和StringBuilder 1.StringBuffer是什么? 答:是一个字符串缓冲区,工作原理:预先在内存中申请一块空间以容纳字符序列,如果预留的空间,则进行自动扩容 ...

  7. 嵊州D5T1 鸡翅 chicken

    鸡翅  chicken [问题描述] 小 x 非常喜欢小鸡翅. 他得知 NSC 超市为了吸引顾客,举行了如下的活动: 一旦有顾客在其他超市找到更便宜的小鸡翅, NSC 超市将免费送给顾客 1000g ...

  8. how to use bookdown

    模板下载 {#moban} 谢益辉 通用模板:https://github.com/rstudio/bookdown-demo 李东风中文模板: http://www.math.pku.edu.cn/ ...

  9. 为什么文件无法用wps打开,甚至wps.exe本身都无法打开?

    原因: 我的wps.exe在目录 programme installation 中 如果我把目录改成 programmeInstallation 那么就会变成打不开的情况. 解决方法就是改回去. 怎么 ...

  10. 题解【洛谷P1596】[USACO10OCT]Lake Counting

    题面 \(\text{Flood Fill}\) 模板题. \(\text{Flood Fill}\) 可以快速求出一个图中连通块的个数. 大概就是遍历每一个点,如果它没有被遍历过且是一个新连通块,那 ...