送给圣诞夜的极光

题目链接:https://www.vijos.org/p/1051

这是一道很水很水的宽搜水题,我主要是觉得自己在搜素这一块有点生疏于是随便找了一题练手,找到这么一道水题,原本以为可以一次过的,但是状况百出,我并不是很擅长bfs,我以前一直用的Pascal写bfs,但是Pascal没有队列,所以没有c++方便,所以这题我就直接用队列做了,然后完美的炸空间炸时间,后来改成递归调用才通过

思路:这一道题和一道宽搜入门题很像,基本上是一样的,这道题叫细胞个数

链接:http://codevs.cn/problem/3492

这两个题的区别是,前者要找自己周围的12个位置,后者只找自己周围上下左右四个位置,这题的关键点也就是找到这12个位置,其他就是那道细胞的做法,寻找一个为‘#’的点,以这个点向周围可扩展区域扩展,每到一个扩展点就把这个点变成‘-’,直到不能扩展,然后继续寻找为‘#’的点

方法不用多说,先看看我这超时又爆内存的队列bfs吧

 #include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<cstdlib>
#include<cmath>
#include<queue>
#define maxn 105
using namespace std; int map[maxn][maxn];
int n,m,tot; struct node{
int x,y;
}; const int dx[]={,-,-,,,,,,-,-,,,};
const int dy[]={,,,,,,-,-,-,,,,-}; int main()
{
scanf("%d%d\n",&n,&m);
char s[maxn];
for(int i=;i<=n;i++)
{
scanf("%s",s+);
for(int j=;j<=m;j++)
{
if(s[j]=='#')map[i][j]=;
}
} queue<node>q;
for(int i=;i<=n;i++)
{
for(int j=;j<=m;j++)
{
if(map[i][j]==)
{
tot++;
q.push((node){i,j});
while(!q.empty())
{
node v=q.front();
q.pop();
map[v.x][v.y]=;
for(int k=;k<=;k++)
{
int nx=v.x+dx[k],ny=v.y+dy[k];
if(map[nx][ny]==&&nx>=&&nx<=n&&ny>=&&ny<=m)
{
q.push((node){v.x+dx[k], v.y+dy[k]});
}
} }
}
}
} printf("%d",tot);
}

个人觉得队列可能容易理解一些,但是队列方法看懂了,递归也可以看懂

AC代码:

 #include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<cstdlib>
#include<cmath>
#include<queue>
#define maxn 105
using namespace std; int map[maxn][maxn];
int n,m,tot;
const int dx[]={,-,-,,,,,,-,-,,,};
const int dy[]={,,,,,,-,-,-,,,,-}; void bfs(int x,int y)
{
map[x][y]=;
for(int i=;i<=;i++)
{
int nx=x+dx[i];
int ny=y+dy[i];
if(map[nx][ny]==&&nx>=&&nx<=n&&ny>=&&ny<=m)
{
bfs(nx,ny);
}
}
} int main()
{
scanf("%d%d",&n,&m);
char a;
for(int i=;i<=n;i++)
for(int j=;j<=m;j++)
{
cin>>a;
if(a=='#')map[i][j]=;
}
for(int i=;i<=n;i++)
for(int j=;j<=m;j++)
{
if(map[i][j]==)
{
tot++;
bfs(i,j);
}
}
cout<<tot;
}

[vijos]1051送给圣诞夜的极光<BFS>的更多相关文章

  1. 【宽搜】Vijos P1051 送给圣诞夜的极光

    题目链接: https://vijos.org/p/1051 题目大意: 给一张‘-’和‘#’的图,规定曼哈顿距离小于等于2的‘#’属于同一图案,求图案数.[曼哈顿距离:对于A(x1,y1)和B(x2 ...

  2. vijos P1051 送给圣诞夜的极光

    调了好久... #include <cstdio> #include <queue> using namespace std; char a[110*110]; /****** ...

  3. codevs1293送给圣诞夜的极光(bfs)

    1293 送给圣诞夜的极光  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 黄金 Gold     题目描述 Description 圣诞老人回到了北极圣诞区,已经快到12点了 ...

  4. Codevs 1293 送给圣诞夜的极光

    1293 送给圣诞夜的极光  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 黄金 Gold 题解  查看运行结果     题目描述 Description 圣诞老人回到了北极圣 ...

  5. Vijos1051. 送给圣诞夜的极光

    试题请參见: https://vijos.org/p/1051 题目概述 圣诞老人回到了北极圣诞区, 已经快到12点了. 也就是说极光表演要開始了. 这里的极光不是极地特有的自然极光景象. 而是圣诞老 ...

  6. 洛谷 P1454 圣诞夜的极光 == codevs 1293 送给圣诞夜的极光

    题目背景 圣诞夜系列~~ 题目描述 圣诞老人回到了北极圣诞区,已经快到12点了.也就是说极光表演要开始了.这里的极光不是极地特有的自然极光景象.而是圣诞老人主持的人造极光. 轰隆隆……烟花响起(来自中 ...

  7. vijos 1047 送给圣诞夜的礼品 矩阵

    题目链接 描述 当小精灵们把贺卡都书写好了之后.礼品准备部的小精灵们已经把所有的礼品都制作好了.可是由于精神消耗的缘故,他们所做的礼品的质量越来越小,也就是说越来越不让圣诞老人很满意.可是这又是没有办 ...

  8. P1049送给圣诞夜的礼品(矩阵十大问题之四)

    https://vijos.org/p/1049 P1049送给圣诞夜的礼品 Accepted 标签:组合数学送给圣诞夜的礼物[显示标签]     返回代码界面 | 关闭   Pascal Pasca ...

  9. vijosP1049 送给圣诞夜的礼品

    vijosP1049 送给圣诞夜的礼品 链接:https://vijos.org/p/1049 [思路] 快速幂+矩阵转换. 将m次矩阵的转换看作是一次快速幂中的乘法操作,这样可以用O(log(k/m ...

随机推荐

  1. 将list集合按指定长度进行切分,返回新的List<List<??>>集合

    Lists.partition public class testList { @Test public void test(){ List<Integer> numList = List ...

  2. MongoDB Compass最新版(v_1.20.5)远程连接数据库

    最近下载了最新版本的MongoDB Compass(v_1.20.5)后才发现软件较之前的版本有了很大的变化,主要体现在创建连接页面和连接方式上. 这是旧版的连接页面,所有的参数项以表单的形式列出,直 ...

  3. Tomcat8优化--Apache JMeter测试

    一.部署测试java web项目(压力测试环境搭建) 1.mysql环境 #切换到mysql目录 cd /usr/local/mysql #查看mysql环境 rpm -qa | grep -i my ...

  4. sass片段

    变量: $color: #333; body { color: $color;} -----> body { color: #333; } 嵌套: nav { ul { margin: 0; } ...

  5. 数据结构 4 时间复杂度、B-树 B+树 具体应用与理解

    前言 面试中,经常会问到有关于MYSQL 索引的相关概念,我们之前也都学过有关树的概念.以及二叉树.二叉查找树.红黑树等.这一节,来关注经常是数据库索引中使用的B-树 在说这些之前,我们需要了解时间复 ...

  6. c++第一周测验

    本次得分为:14.00/14.00, 本次测试的提交时间为:2020-03-08, 如果你认为本次测试成绩不理想,你可以选择再做一次. 1 单选(1分) 下面程序片段哪个没错? 得分/总分 A. in ...

  7. python网络协议

    一 互联网的本质 咱们先不说互联网是如何通信的(发送数据,文件等),先用一个经典的例子,给大家说明什么是互联网通信. 现在追溯到八九十年代,当时电话刚刚兴起,还没有手机的概念,只是有线电话,那么此时你 ...

  8. JetBrains Quest 3

    起因 今天早上看了一篇博文: 此时的我:"哎,这等好事不等我!" 然后......我打开官方推特: "什么?最后的任务?" 于是就有了这篇文章 开始操作 1.神 ...

  9. centOS7python版本升到3

    我们使用Python源代码编译的方式安装python3. 一.安装必要工具 yum-utils ,它的功能是管理repository及扩展包的工具 (主要是针对repository) $ sudo y ...

  10. 使用C#+EmguCV处理图像入门(图像读取_显示_保存)二

    上个随笔已经介绍EmguCV的一些常用库和程序安装以及环境变量的配置,这次写的是如何使用这个类库对图像进行操作. EmguCV图像处理系统组成(个人见解): 图像的基本操作: 贴个代码: using ...