时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 32768K,其他语言65536K
64bit IO Format: %lld

题目描述

璐神现在有张n*m大小的地图,地图上标明了陆地(用"#"表示)和海洋(用"."表示),现在璐神要计算这张地图上岛屿的数量。
已知岛屿是由陆地的连通块组成,即一块陆地的上、下、左、右,左上,右上,左下,右下有其他陆地,则构成连通块,以此类推。
此外,岛屿的详细定义如下:
1、岛屿的周围必须全是海洋。
2、如果连通块有任意区域在地图边界,则该连通块不是岛屿。

输入描述:

第1行输入两个整数n,m,代表地图的长和宽。第2-n+1行,每行输入m个字符,字符为"#"表示陆地,为"."表示海洋。数据保证:0<n,m≤200

输出描述:

输出一行整数,代表岛屿的数量。
示例1

输入

3 3
...
.#.
...

输出

1

说明

只有中间的1块陆地是岛屿,所以岛屿数=1

示例2

输入

3 3
#..
.#.
...

输出

0

说明

中间的连通块有区域在边界,所以不是岛屿,岛屿数=0。

【分析】:bfs 求解连通块,注意的是在求解过程中,如果出现连通块区域在边界,则记录此连通块无效,但仍需将 bfs 操作进行完。【代码】:

#include <bits/stdc++.h>using namespace std;
const int maxn = 250;
char mp[250][250];
int vis[maxn][maxn]={0};
int dir[][2] ={{1,0},{0,1},{-1,0},{0,-1},{-1,-1},{-1,1},{1,-1},{1,1}};
int n,m,flag=0;void dfs(int x,int y)
{vis[x][y]=1;if(x==0||y==0||x==n-1||y==m-1)flag=1;for(int i=0;i<8;i++){int tx=x+dir[i][0];int ty=y+dir[i][1];if(mp[tx][ty]=='#'&&tx>=0&&ty>=0){mp[tx][ty]='.';dfs(tx,ty);}}
}
int main()
{int sum=0;cin>>n>>m;for(int i=0;i<n;i++)cin>>mp[i];for(int i=0;i<n;i++){for(int j=0;j<m;j++){if(mp[i][j]=='#'){flag=0;dfs(i,j);if(flag==0)sum++;}}}cout<<sum<<endl;return 0;
}

DFS

#include<bits/stdc++.h>
using namespace std;const int maxn=210;char mp[maxn][maxn];
int vis[maxn][maxn];
const int dir[8][2]={{1,0},{-1,0},{0,1},{0,-1},{1,1},{1,-1},{-1,1},{-1,-1}};int n,m,ans=0;void bfs(int x,int y){if(mp[x][y]=='.'){vis[x][y]=2;return;}if(x==0||y==0||x==n-1||y==m-1){vis[x][y]=2;//  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==0||nowy==0||nowx==n-1||nowy==m-1){vis[x][y]=2;//return;
        }q.pop();for(int i=0;i<8;++i){int x1=nowx+dir[i][0];int y1=nowy+dir[i][1];if(vis[x1][y1]==0&&mp[x1][y1]=='#'){vis[x1][y1]=1;q.push(make_pair(x1,y1));}}}
}int main(){while(cin>>n>>m){memset(mp,0,sizeof(mp));memset(vis,false,sizeof(vis));ans=0;for(int i=0;i<n;++i)cin>>mp[i];for(int i=0;i<n;++i){for(int j=0;j<m;++j){if(!vis[i][j]){vis[i][j]=1;bfs(i,j);if(vis[i][j]==1){ans++;}}}}cout<<ans<<endl;}return 0;
}

BFS

转载于:https://www.cnblogs.com/Roni-i/p/7909104.html

中矿新生赛 H 璐神看岛屿【BFS/DFS求联通块/连通块区域在边界则此连通块无效】...相关推荐

  1. 16哈理工新生赛 H 下雪啦 (哈希表)

    题目链接:点击打开链接 下雪啦 Time Limit: 2500 MS Memory Limit: 32768 K Total Submit: 184(32 users) Total Accepted ...

  2. 湖南师范大学2018年大学生程序设计竞赛新生赛 A 齐神和心美的游戏【hash】

    [链接]:A [题意]:给你n个数的序列和k.判断是否可以三个数组成k(同一个数可以拿多次) [分析]:每个数vis记录一下.2层循环.两数之和不超过k以及剩下的数出现在序列中那么ok. [代码]: ...

  3. 西南科技大学2021届新生赛 H.小凡出数据(构造)

    LINK 首先把输入的距离对从小到大排个序 那么距离为1,21,21,2的可以直接连起来 考虑距离为333的怎么办,设u,vu,vu,v间的距离为333 可能有两种来源,一是由1+21+21+2组成, ...

  4. 2015GPNU新生赛题解

    2015GPNU新生赛题解 今年的题目结合了往年的题目和华工,华师新生赛题目,确实是历年最难. * 1001 * Problem Description 最近ACM协会各种各样的费用都要申报,会长一时 ...

  5. 21级爪哇程序设计新生赛(二)题解

    21级爪哇程序设计新生赛(二) 序 A 小爪的数字集合(并查集) B 小爪的得分(博弈) C 小爪的博弈(博弈) D ljc和cyj玩五子棋(模拟) E ljc和雪球(模拟) F LJC的背包(动态规 ...

  6. BUUCTF-MISC-[BJDCTF2020]你猜我是个啥~[ACTF新生赛2020]outguess

    文章目录 1.[BJDCTF2020]你猜我是个啥 2.秘密文件 3.[SWPU2019]神奇的二维码 4.[BJDCTF2020]一叶障目 5.[BJDCTF2020]just_a_rar 6.[B ...

  7. QLU ACM 2018新生赛解题报告

    QLU ACM 2018 新生赛解题报告 A [1303]约数个数 题目描述 输入 输出 解析 B [1301]Alice and Bob 题目描述 输入 解析 C [1289] 黑白黑 题目描述 输 ...

  8. HNUCM信息科学与工程学院第二届新生赛——热身赛

    HNUCM信息科学与工程学院第二届新生赛--热身赛 题目比较坑点较多,注意避坑,特别是数据范围和题意,因为是新生赛,所以还是选择使用了c语言书写,基本没有调用内置函数库,排序统一使用了冒泡排序,没有使 ...

  9. [SUCTF2018]babyre [ACTF新生赛2020]fungame

    文章目录 [SUCTF2018]babyre 惯用思维 常人思维 GAMEOVER [ACTF新生赛2020]fungame int __cdecl sub_401340(int a1) int __ ...

最新文章

  1. php substr 去掉前n位_用PHP是如何做图片防盗链的
  2. 直流电源端口雷击或瞬态浪涌防护设计方案图详解
  3. 微软(MS Dynamics SL)Solomon 承包商用户2006年度会议!
  4. URLScan工具配置方法第1/2页
  5. 对话框 函数_通过函数式编程实现动态对话框处理程序
  6. react-native 热更新react-native-pushy集成遇到的问题
  7. day10:函数进阶
  8. 哪些代码设计看似是面向对象,实际是面向过程的?
  9. 计划任务 crontab、at
  10. 圆角ImageView
  11. [转]测试淘宝站内的搜索系统
  12. vSAN其实很简单-Quickstart是一件很炫的东西
  13. php多条件检索怎么写,sql查询同时满足三个条件 php查询数据库,同时满足三个条件的sql怎么写?...
  14. python random 生成随机数
  15. idea mac xml注释快捷键
  16. 64位plsql连接oracle,PLSQL Developer连接Oracle11g 64位数据库配置详解(转)
  17. 网络编程练手小项目---英英词典
  18. 编译错误(拓补排序)
  19. HDD Regenerator V2.0绿色中文注册版-(令硬盘起死回生)_-Chaz-_新浪博客
  20. VMware虚拟机全屏状态下如何快速切换回原主机界面

热门文章

  1. 完整免授权彩虹源码(多模板+小储云商城模板)6.7.5
  2. 好玩的网页小游戏源码《星球防御战射击》
  3. 百度SEO站群织梦dedecms自定义多条件筛选插件源码
  4. 2022虎年背景全新UI头像框制作微信小程序源码
  5. WPF中的事件及冒泡事件和隧道事件(预览事件)的区别
  6. WordPress 主题教程 #6:侧边栏
  7. Windows下IIS+PHP 5.2的安装与配置
  8. CSS:理解:Before和:After伪元素
  9. 手机firebug查看网页代码 How to View Website Source Codes on iPad / iPhone
  10. 最小生成树——安慰奶牛(蓝桥杯试题集)