洛谷P1332 血色先锋队 题解

本文介绍了洛谷P1332题目【血色先锋队】的解题思路,重点讲解了利用广度优先搜索(BFS)解决此问题的方法。通过BFS计算每个坐标被感染的时间,从而得出领主被感染的时间,避免了暴力枚举导致的时间超限问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

【题解】洛谷P1332 血色先锋队

题解 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[250010];//设置结构体数组维护队列
int head,tail;//分别为头指针、尾指针
int n,m,a,b,vis[505][505],c[250010],d[250010],e,f,i,j,k;//vis的意义同分析,c数组和d数组为感染源坐标,e、f为领主坐标
int P[510][510];//每个坐标被感染时间
void bfs() {//开始bfs
    tail=0;
    head=0;//初始化指针
    for(i=1; i<=a; i++) {//先把已知条件加入队列,并初始化时间
        s[++tail].x=c[i];//相当于tail++,s[tail].x=c[i]
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值