送给圣诞夜的极光

题目链接: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. css自定义 range radio select的样式滑轮,按钮,选择框

    写在前面: 之前踩坑css的时候,遇到滑轮,按钮,选择框这类型的东西,为了页面效果,总是需要自定义他们的样式,而不使用他们的默认样式.当时写的时候,我也是蛮头疼的,弄了个demo,链接在下面.对此做个 ...

  2. Nginx server name配置子域名二级域名

    绑定子域名到不同目录(子站) 网站的目录结构为 /var/www/html: ├── fx └── blog└── photo html为nginx的默认网站目录. sudo vi /etc/ngin ...

  3. 从0到1使用MyBatis

    MyBatis作为最流行的数据中间层,成为企业Java软件开发中非常重要的软件. 一.基本配置 1.首先需要导入Maven <dependency> <groupId>org. ...

  4. 上线前测试的bug,要不要处理,跟版本的关系

    最近有两个项目是在旧版本上实施的.上线前经过一轮测试后,发现了一些产品(我们的产品确实不稳定) 在这个项目上,修改产品bug是肯定的.但是要不要追踪这些bug? 这就跟版本使用范围有关系了,毕竟要考虑 ...

  5. mysql中实现更新数据+1,再次更新数据-1

    $sql="update article set comment=comment^1 where a_id=2"; 这条语句你会发现当你更新comment字段时为1,再次更新时为0 ...

  6. 新手学黑客攻防-黑客攻击电脑方式和认识IP地址

    听说过黑客,没见过黑客,从最基础的开始学习,让我能在互联网中保护自己的隐私安全和信息安全. 黑客攻击电脑方式 黑客攻击的方式多种多样,但常见的只有以下几种,基本上每个黑客都会用到: 网络报文嗅探 网络 ...

  7. plantUML最佳实践

    plantUML 使用plantUML中的活动图用来画流程图很好用; 但类图等就不很好用; 个人体会如下: • 时序图 推荐 • 用例图 一般 • 类 图 不推荐, 用Visual Paradigm或 ...

  8. js随机背景色 并显示色号

    今天重新看了一般原生js教程,看到一个例子 是点击按钮改变背景色. 我就改进了一下 点击按钮换一个颜色 并把色号给显示出来 <!DOCTYPE html><html><h ...

  9. 为了弄懂Flutter的状态管理, 我用10种方法改造了counter app

    为了弄懂Flutter的状态管理, 我用10种方法改造了counter app 本文通过改造flutter的counter app, 展示不同的状态管理方法的用法. 可以直接去demo地址看代码: h ...

  10. Python基础篇(三)_函数及代码复用

    Python基础篇_函数及代码复用 函数的定义.使用: 函数的定义:通过保留字def实现. 定义形式:def <函数名>(<参数列表>): <函数体> return ...