[vijos]1051送给圣诞夜的极光<BFS>
送给圣诞夜的极光
题目链接: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>的更多相关文章
- 【宽搜】Vijos P1051 送给圣诞夜的极光
题目链接: https://vijos.org/p/1051 题目大意: 给一张‘-’和‘#’的图,规定曼哈顿距离小于等于2的‘#’属于同一图案,求图案数.[曼哈顿距离:对于A(x1,y1)和B(x2 ...
- vijos P1051 送给圣诞夜的极光
调了好久... #include <cstdio> #include <queue> using namespace std; char a[110*110]; /****** ...
- codevs1293送给圣诞夜的极光(bfs)
1293 送给圣诞夜的极光 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题目描述 Description 圣诞老人回到了北极圣诞区,已经快到12点了 ...
- Codevs 1293 送给圣诞夜的极光
1293 送给圣诞夜的极光 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题解 查看运行结果 题目描述 Description 圣诞老人回到了北极圣 ...
- Vijos1051. 送给圣诞夜的极光
试题请參见: https://vijos.org/p/1051 题目概述 圣诞老人回到了北极圣诞区, 已经快到12点了. 也就是说极光表演要開始了. 这里的极光不是极地特有的自然极光景象. 而是圣诞老 ...
- 洛谷 P1454 圣诞夜的极光 == codevs 1293 送给圣诞夜的极光
题目背景 圣诞夜系列~~ 题目描述 圣诞老人回到了北极圣诞区,已经快到12点了.也就是说极光表演要开始了.这里的极光不是极地特有的自然极光景象.而是圣诞老人主持的人造极光. 轰隆隆……烟花响起(来自中 ...
- vijos 1047 送给圣诞夜的礼品 矩阵
题目链接 描述 当小精灵们把贺卡都书写好了之后.礼品准备部的小精灵们已经把所有的礼品都制作好了.可是由于精神消耗的缘故,他们所做的礼品的质量越来越小,也就是说越来越不让圣诞老人很满意.可是这又是没有办 ...
- P1049送给圣诞夜的礼品(矩阵十大问题之四)
https://vijos.org/p/1049 P1049送给圣诞夜的礼品 Accepted 标签:组合数学送给圣诞夜的礼物[显示标签] 返回代码界面 | 关闭 Pascal Pasca ...
- vijosP1049 送给圣诞夜的礼品
vijosP1049 送给圣诞夜的礼品 链接:https://vijos.org/p/1049 [思路] 快速幂+矩阵转换. 将m次矩阵的转换看作是一次快速幂中的乘法操作,这样可以用O(log(k/m ...
随机推荐
- kafka知识整理
title: kafka知识整理 date: 2019-06-18 10:59:46 categories: MQ tags: kafka --- 转载自:https://www.cnblogs.co ...
- Python知识点 - Xpath提取某个标签,需要转换为HTML。
# lxml转Html from lxml import etree from HTMLParser import HTMLParser def lxml_to_html(text:etree ...
- 前端劝退预警:JavaScript 工具链不完全指南
经过这么多年的发展,JavaScript 早已经不是当年那个不太起眼的脚本语言.如今的 JavaScript 可以说是风光无限,在 Web 前端.移动端.服务端甚至物联网设备上都大展身手,到处都有它的 ...
- 第一篇:解析Linux是什么?能干什么?它的应用领域!
不得不说的前言(不看完睡觉会尿床):饿货们~!你说你们上学都学了点啥?这不懂那也不懂,快毕业了啥也不会.专业课程不学好毕业了也找不到好工作.爸妈给你养大,投资了多少钱.你毕业后随便找了个什么鸡毛工作开 ...
- linux4.1.36 2440 启用 RTC 支持
/drivers/rtc/rtc-s3c.c822行static struct platform_driver s3c_rtc_driver = { .probe = s3c_rt ...
- 19.10.11学习日记随笔 mysql事务隔离性
一天的感悟 学习事务的处理方式,其中反想自己学过的flask 默认是开启事务的,flask_sqlalchemy每次在提交时都是需要commit,或者失败是需要rollback回滚操作的,其实pyth ...
- java面试汇总一
第一部分 Java SE基础(1) 1.1 java的8种基本数据类型 装箱 拆箱 1.1.1 8种基本的数据类型 1.1.2装箱 拆箱 自动装箱是 Java 编译器在基本数据类型和对应的对象包 ...
- django中CBV源码分析
前言:Django的视图处理方式有两种: FBV(function base views) 是在视图里基于函数形式处理请求. CBV(class base views)是在视图里基于类的形式处理请求. ...
- dos下 批处理 用 pause 可以在最后暂停 查看结果信息 build.bat
dos下 批处理 用 pause 可以在最后暂停 查看结果信息
- Asp.net 的DropDownList 控件动态加载
在做连接数据库表,在页面上用DropDownList 下拉框查询某条数据时,因为数据库里的数据,随时都有可能增加或减少,而下拉框关联的某个字段的值并不一定是固定的. 表信息: CREATE TABLE ...