【题解】洛谷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