中矿新生赛 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 ...
随机推荐
- unity2D技术学习与整理
目前有关unity2D的教程以及原理几乎都是国外的.我在这方面也是新手,看了一些例子有很多不懂的地方. 这个网站提供的教程很有参考价值 http://brackeys.com/ 还有这个 http:/ ...
- 玩转Linux之pwd命令
玩转Linux之pwd命令 你有没有遇到过需要知道当前所在目录却无从得知?有没有想要复制出当前所在目录层次却不知如何下手?俗话说有困难找警察,想知道目录层次自然要找pwd了.那么问题来了: 什么是pw ...
- java初学4
1.interface接口 (1)[修饰符] interface 接口名 extends 父接口1,父接口2.... •没有构造方法,不能实例化; •接口只能继承接口,不能 ...
- springboot11 JPA
一.JPA 1. JPA 介绍 JPA是Java Persistence API的简称,中文名Java持久层API,是JDK 5.0注解或XML描述对象-关系表的映射关系,并将运行期的实体对象持久化到 ...
- 网络--路由表&IP选路
路由表的 flags 字段显示路由状态: A 活动的休眠网关检测在路由上被启用.本字段只适用于 AIX 5.1 或更新版本. U :Up. H :路由至主机而不是网络. G :路由至网关. 不带G表示 ...
- XML快速入门
XML是什么 Extensible Markup Language 自定义标签: 用来传输数据: 可扩展标记语言,是一种类似超文本标记语言的标记语言. 与HTML的比较: 1.不是用来替代HTML的: ...
- 详解Linux运维工程师应具备的十大技能
Linux系统如果是学习可以选用Redhat或CentOS,特别是CentOS在企业中用得最多,当然还会有其它版本的,但学习者还是以这2个版本学习就行,因为这两个版本都是兄弟,没区别的,有空可以再研究 ...
- 在Struts等框架中获取Spring容器的方式
WebApplicationContext ctx = WebApplicationContextUtils.getWebApplicationContext(ServletContext src); ...
- JZOJ 5305 C先生
题意: 有一个n个点,m条边的图,没有重边.自环,且每一条边最多属于一个环路. 给出q组询问,每次询问u,v两点间的路径有多少种可能. 思路: 先看下方样例说明: 由样例说明可以得知,路径上每经过一个 ...
- BZOJ5300 [Cqoi2018]九连环 【dp + 高精】
题目链接 BZOJ5300 题解 这题真的是很丧病,,卡高精卡到哭 我们设\(f[i]\)表示卸掉前\(i\)个环需要的步数 那么 \[f[i] = 2*f[i - 2] + f[i - 1] + 1 ...