本来一个很简单的题因为一个极其愚蠢的错误卡了非常久……

题目描述

输入: 输入n+1行,第一行为正整数n,表示地图的大小,n<=100
之后n行每行输入n个字符,由*和#组成,其中*表示海洋,#表示陆地
两块陆地在上下左右四个方向上有间接接壤视为同属于一个大陆
例如

*#
#*

视为拥有两块大陆
输出: 有多少块大陆
输入样例

5
*###*
**##*
#****
#*#**
***##

输出样例

4

思路

每碰到一块大陆,就计数,然后把这一整块大陆变成海洋,使其不对后续的计数产生干扰。
由于某一块大陆可能有非常多的土地接壤,考虑用递归来实现所有陆地的反转。
符号并不重要,将地图二值化,*->0->海洋,#->1->陆地

采用加边法来规避数组越界的问题,将实际操作的范围规定为[1,n]*[1,n]而非从0开始计数,虽然浪费了空间,但是使得i-1和j-1的访问在物理上不会越界,不会导致程序卡死的问题,同时也简化了程序设计的逻辑。

尬点

读入时需要注意n后的回车要吃掉,每行字符串后面的回车也要吃掉,否则会导致读入的数组不正常。
之前卡了很长一段时间,是因为我在定义了一个全局变量n之后,写主函数时又手贱定义了一个n。
根据语法,这没有任何错误,在局部变量与全局变量重名时,函数内使用局部变量,这是语言的特性,也不止C有。
可是这就导致读入的n并没有保存到全局的n中,子函数中访问到的n都是0,于是全部都工作不正常,都没输出……
我还纳闷咋没输出……还以为是递归的问题,调了半天,后来尝试想把打印数组的过程写成子函数的时候发现了错误。实属hape。

参考

和过去的两个题有点像,特别是前者。
计算机导论模拟测试练习(2018年秋)I. 灯矩阵
第四次机考(2019)D. 卫星照片二

#include <stdio.h>
#define MAX 100
int n;
int map[MAX+2][MAX+2]={0};
void reverse(int i,int j);int main(int argc, char const *argv[])
{int i,j,cnt=0;char ch;scanf("%d",&n);getchar();for(i=1;i<=n;++i)for(j=1;j<=n;++j){ch=getchar();if(j==n) getchar();map[i][j]=(ch=='*')?0:1;}for(i=1;i<=n;++i)for(j=1;j<=n;++j)if(map[i][j]){++cnt;reverse(i,j);}printf("%d\n",cnt );return 0;
}void reverse(int i,int j)
{   if(i<1||j<1||i>n||j>n) return ;map[i][j]=0;if(map[i-1][j]) reverse(i-1,j);if(map[i+1][j]) reverse(i+1,j);if(map[i][j-1]) reverse(i,j-1);if(map[i][j+1]) reverse(i,j+1);
}

buaacoding ?.海洋与陆地相关推荐

  1. Google Earth Engine(GEE)——Sentinel-3 OLCI EFR:海洋和陆地彩色地球观测全分辨率数据集

    海洋和陆地颜色仪器 (OLCI) 地球观测全分辨率 (EFR) 数据集包含 21 个光谱带的顶部大气辐射,中心波长范围在 0.4μm 和 1.02μm 之间,空间分辨率为 300m,每 2 天覆盖一次 ...

  2. 《mSystems》比较宏基因组学探究海洋和陆地生态系统中磷酸盐分解代谢途径

    比较宏基因组学(Comparative Metagenomics)是目前非常流行的一个概念,也是目前使用最多的研究方式,简单的说就是通过不同样本之间的比较来回答最初的"科学问题". ...

  3. 如果陆地和海洋的比例颠倒,那地球会是什么样子

    1. 概述 众所周知,地球上陆地的面积约占30%,海洋的面积约占70%.如果将地球商陆地与海洋的面积互换,也就是说陆地占70%,海洋占30%,那么地球上的环境也将与现在大相径庭,甚至也不会有人类存在. ...

  4. 海洋陆地算法_了解网络的陆地和海洋

    海洋陆地算法 Jeremy Keith has the rare ability to communicate web technologies with refreshing clarity: re ...

  5. 2023-05-13:你现在手里有一份大小为 n x n 的 网格 grid, 上面的每个 单元格 都用 0 和 1 标记好了其中 0 代表海洋,1 代表陆地。 请你找出一个海洋单元格,这个海洋单元格

    2023-05-13:你现在手里有一份大小为 n x n 的 网格 grid, 上面的每个 单元格 都用 0 和 1 标记好了其中 0 代表海洋,1 代表陆地. 请你找出一个海洋单元格,这个海洋单元格 ...

  6. MODIS(TerraAqua)陆地标准产品

    △MODIS L1B 标准产品总体介绍 MODIS-L1B 是MODIS 系列数据产品中的一种(与已经发布的 MODIS-land 产品并列),即经过仪器标定的 MODIS数据产品,产品编号为MOD0 ...

  7. 这 10 条河,「贡献」了全球 95% 的海洋塑料污染

    世界经济论坛在 2016 年发布的报告显示,每年全球有 800 万吨塑料流入海洋,相当于每分钟就有一卡车塑料被倒入海里. 直接受到塑料垃圾影响的沿海及海洋生物种类高达 800 多种,每年就会有 100 ...

  8. 新的里程碑,海洋元宇宙AQUANEE即将登陆Gate以及BitMart

    毫无疑问,以 NFT.GameFi.SocialFi 等概念引领的 Web3 赛道,是当下区块链领域中的热门赛道,而且 Web 3.0 也终将取代 Web2.0 而成为未来互联网趋势. 不但一些专注于 ...

  9. CESM气候模式简介与POP海洋分量

    一.CESM模式简介 地球系统模式为地球系统变化规律.认识人类活动与全球变化之间的相互作用研究,以及相应政策制定提供了不可或缺的定量依据,是上述研究的科学量化工具之一. 地球系统模式(Communit ...

最新文章

  1. 动态多尺度图表达3D人体骨架运动,实现精准预测效果超SOTA
  2. 【四】php字符串操作
  3. Linux修改挂载目录名称
  4. 看我如何用python来玩百万英雄
  5. python 根据开头时间戳 合并两个文件
  6. WPS如何并排放置两张图片_Animate如何制作文字动图动画
  7. 台式计算机显示器的分辨率,台式电脑分辨率多少合适,测试电脑分辨率
  8. 通过使用 NTLite 工具实现精简Windows系统
  9. python代码解读_python源代码解读
  10. 事件营销成功案例-引爆全网的优衣库事件
  11. github托管静态网页
  12. MATLAB 中的 mod() 函数
  13. 如何在网页中插入视频
  14. java 多文件zip压缩包下载导出
  15. Visual Studio 2017 企业版密匙
  16. matlab半小提琴图,不会编程,也可以画小提琴图啦!
  17. ffmpeg开发之旅(3):AAC编码格式分析与MP4文件封装(MediaCodec+MediaMuxer)
  18. 蓝牙协议分析(2)_协议架构
  19. ArcGIS坡度的提取
  20. VMware报错 无法打开内核设备 \\.\Global\vmx86: 系统找不到指定的文件

热门文章

  1. 无聊做了个发骚扰短信的,结果。。。
  2. MySQL8.0.28安装教程
  3. 数学建模学习(71):营销组合模型
  4. 在EditText中添加QQ表情
  5. 手机号码规则模式匹配所有匹配串
  6. 小米盒子4刷机armbian 系统
  7. 题解 P4092 【[HEOI2016/TJOI2016]树】
  8. 使用JAF创建MIME消息
  9. classpath类路径是什么
  10. linux系统安装tv软件下载,Linux版TeamViewer安装包下载