中矿新生赛 H 璐神看岛屿【BFS/DFS求联通块/连通块区域在边界则此连通块无效】
空间限制:C/C++ 32768K,其他语言65536K
64bit IO Format: %lld
题目描述
输入描述:
第1行输入两个整数n,m,代表地图的长和宽。
第2-n+1行,每行输入m个字符,字符为"#"表示陆地,为"."表示海洋。
数据保证:0<n,m≤200
输出描述:
输出一行整数,代表岛屿的数量。
输入
3 3
...
.#.
...
输出
1
说明
只有中间的1块陆地是岛屿,所以岛屿数=1
输入
3 3
#..
.#.
...
输出
0
说明
中间的连通块有区域在边界,所以不是岛屿,岛屿数=0。 【分析】:bfs 求解连通块,注意的是在求解过程中,如果出现连通块区域在边界,则记录此连通块无效,但仍需将 bfs 操作进行完。
【代码】:
#include <bits/stdc++.h> using namespace std;
const int maxn = ;
char mp[][];
int vis[maxn][maxn]={};
int dir[][] ={{,},{,},{-,},{,-},{-,-},{-,},{,-},{,}};
int n,m,flag=; void dfs(int x,int y)
{
vis[x][y]=;
if(x==||y==||x==n-||y==m-)
flag=;
for(int i=;i<;i++)
{
int tx=x+dir[i][];
int ty=y+dir[i][];
if(mp[tx][ty]=='#'&&tx>=&&ty>=)
{
mp[tx][ty]='.';
dfs(tx,ty);
}
}
}
int main()
{
int sum=;
cin>>n>>m;
for(int i=;i<n;i++)
cin>>mp[i];
for(int i=;i<n;i++)
{
for(int j=;j<m;j++)
{
if(mp[i][j]=='#')
{
flag=;
dfs(i,j);
if(flag==)
sum++;
}
}
}
cout<<sum<<endl;
return ;
}
DFS
#include<bits/stdc++.h>
using namespace std; const int maxn=; char mp[maxn][maxn];
int vis[maxn][maxn];
const int dir[][]={{,},{-,},{,},{,-},{,},{,-},{-,},{-,-}}; int n,m,ans=; void bfs(int x,int y){
if(mp[x][y]=='.'){
vis[x][y]=;
return;
}
if(x==||y==||x==n-||y==m-){
vis[x][y]=;
// return;
} queue<pair<int,int> >q;
q.push(make_pair(x,y));
while(!q.empty()){
int nowx=q.front().first;
int nowy=q.front().second;
if(nowx==||nowy==||nowx==n-||nowy==m-){
vis[x][y]=;
//return;
}
q.pop();
for(int i=;i<;++i){
int x1=nowx+dir[i][];
int y1=nowy+dir[i][];
if(vis[x1][y1]==&&mp[x1][y1]=='#'){
vis[x1][y1]=;
q.push(make_pair(x1,y1));
}
}
}
} int main(){
while(cin>>n>>m){
memset(mp,,sizeof(mp));
memset(vis,false,sizeof(vis));
ans=;
for(int i=;i<n;++i)
cin>>mp[i];
for(int i=;i<n;++i){
for(int j=;j<m;++j){
if(!vis[i][j]){
vis[i][j]=;
bfs(i,j);
if(vis[i][j]==){ ans++;
}
}
}
}
cout<<ans<<endl;
} return ;
}
BFS
中矿新生赛 H 璐神看岛屿【BFS/DFS求联通块/连通块区域在边界则此连通块无效】的更多相关文章
- 2019-ACM-ICPC-南昌区网络赛-H. The Nth Item-特征根法求通项公式+二次剩余+欧拉降幂
2019-ACM-ICPC-南昌区网络赛-H. The Nth Item-特征根法求通项公式+二次剩余+欧拉降幂 [Problem Description] 已知\(f(n)=3\cdot f(n ...
- Codeforces 801 A.Vicious Keyboard & Jxnu Group Programming Ladder Tournament 2017江西师大新生赛 L1-2.叶神的字符串
A. Vicious Keyboard time limit per test 2 seconds memory limit per test 256 megabytes input standard ...
- 湖南师范大学2018年大学生程序设计竞赛新生赛 A 齐神和心美的游戏【hash】
[链接]:A [题意]:给你n个数的序列和k.判断是否可以三个数组成k(同一个数可以拿多次) [分析]:每个数vis记录一下.2层循环.两数之和不超过k以及剩下的数出现在序列中那么ok. [代码]: ...
- SCNU 2015ACM新生赛决赛【F. Oyk闯机关】解题报告
题目大意:一个$N$$\times$$N$的阵列,每个格子有$X_{ij}$个调和之音,若每次只能选择走右边或下边,从左上角出发走到右下角,问最多能收集到多少个调和之音? ...
- SCNU ACM 2016新生赛初赛 解题报告
新生初赛题目.解题思路.参考代码一览 1001. 无聊的日常 Problem Description 两位小朋友小A和小B无聊时玩了个游戏,在限定时间内说出一排数字,那边说出的数大就赢,你的工作是帮他 ...
- [ACTF2020 新生赛]BackupFile && [ACTF2020 新生赛]Upload &&[GYCTF2020]Blacklist
[ACTF2020 新生赛]BackupFile 尝试找到源代码,加上题目是备份文件,猜测备份文件里面有网站的源代码,御剑扫描一下,就扫到index.php 访问index.php.bak 下载源代码 ...
- [BUUCTF]REVERSE——[ACTF新生赛2020]usualCrypt
[ACTF新生赛2020]usualCrypt 附件 步骤: 例行检查,无壳,32位程序 32位ida载入,直接看main函数 逻辑很简单,一开始让我们输入一个字符串,然后该字符串经过sub_4010 ...
- 2013年省赛H题
2013年省赛H题你不能每次都快速幂算A^x,优化就是预处理,把10^9预处理成10^5和10^4.想法真的是非常巧妙啊N=100000构造两个数组,f1[N],间隔为Af2[1e4]间隔为A^N,中 ...
- 2018 ACMICPC上海大都会赛重现赛 H - A Simple Problem with Integers (线段树,循环节)
2018 ACM 国际大学生程序设计竞赛上海大都会赛重现赛 H - A Simple Problem with Integers (线段树,循环节) 链接:https://ac.nowcoder.co ...
随机推荐
- 一个初学者的辛酸路程-初识Django
前言: 主要是关于JavaScript的高级部分以及Django 主要内容: 一.jQuery 事件绑定: DOM事件绑定: -直接在标签上绑定 第一种: $('.title').click(func ...
- AppCan试用体验
最近自己想开发一个基于Android平台的小应用,但不想使用JAVA开发,还要快速实现功能,学习成本低. 所以找了很多框架,最后基本锁定在phoneGap和AppCan,又看了AppCan与phone ...
- 深入MySQL用户自定义变量:使用详解及其使用场景案例
一.前言 在前段工作中,曾几次收到超级话题积分漏记的用户反馈.通过源码的阅读分析后,发现问题出在高并发分布式场景下的计数器上.计数器的值会影响用户当前行为所获得积分的大小.比如,当用户在某超级话题下连 ...
- Android 图片文字单位 px、dp、sp区别
文章来源:http://www.cnblogs.com/bjzhanghao/archive/2012/11/06/2757300.html px:像素,一个像素点,1px代表屏幕上一个物理的像素点: ...
- shell之进程
ps System V 风格 - -elF -ef -eF BSD a所有跟终端有关的进程 ...
- SpringBoot Rabbitmq发送消息
官方文档:https://docs.spring.io/spring-boot/docs/2.1.3.RELEASE/reference/htmlsingle/#boot-features-amqp ...
- VS2017+EF+Mysql生成实体数据模型(解决闪退的坑)
原文:VS2017+EF+Mysql生成实体数据模型(解决闪退的坑) 最近要使用VS2017+EF+Mysql,在生成实体数据模型踏过一些坑,在此做个总结. 1.先下载并安装 mysql-connec ...
- 【bzoj1007】[HNOI2008]水平可见直线 半平面交/单调栈
题目描述 在xoy直角坐标平面上有n条直线L1,L2,...Ln,若在y值为正无穷大处往下看,能见到Li的某个子线段,则称Li为可见的,否则Li为被覆盖的.例如,对于直线:L1:y=x; L2:y=- ...
- [洛谷P4074][WC2013]糖果公园
题目大意:给一棵$n$个节点的树,每个点有一个值$C_i$,每次询问一条路径$x->y$,求$\sum\limits_{c}val_c\times \sum\limits_{i=1}^{cnt_ ...
- 树上莫队 SPOJ COT2
题意: 给一棵树,每次查询u到v路径上有多少不同的点权 首先需要证明这类题目符合区间加减性质 摘选一段vfk大牛的证明 用S(v, u)代表 v到u的路径上的结点的集合. 用root来代表根结点,用l ...