航拍地图问题(细胞问题)

1. 问题描述

Jacky在网上发布了通过无人机航拍的某海域的地图,该海域有很多岛屿,为了能更好地分析该区域的航拍地图,地图被数字化为0到9组成矩阵,0表示该位置为大海,数字1到9代表该位置为陆地,沿非0数字上下左右还是非0数字则为同一陆地,求给定的数字化航拍地图中陆地的个数。

【输入格式】

第1行为两整数m,n(m行,n列)

第2行开始是一个m*n的矩阵

【输出格式】

只有1行,为矩阵中的陆地的个数。

【输入样例】

4 11

04523000815

90345605000

60456006711

00000000894

【输出样例】

4

2. 算法思想

使用广度优先搜索,遍历地图的每一个位置,递归出口就是当前搜索的位置已经被搜索过、超出地图范围,或者该位置是海水。这样从一块陆地的任何一个位置开始搜索,一旦所有的层次的递归全部结束,就表示这一块陆地查找结束。

数字化题图采用二维数组的形式存储。

数组说明int *map*[M][N](开辟M*N个空间,下标[0][0]~[M-1][N-1]),陆地标记为1,海水标记为0,搜索过的位置也同样标记为0。

3. 完整代码

public class Item_02 {static int m;static int n;static int sum = 0;//陆地个数static int[][] map; //标记地图状况,0为海水public static void main(String[] args) throws IOException {Scanner in = new Scanner(System.in);m = in.nextInt();n = in.nextInt();map = new int[m][n];String line;int tmp = 0;line = in.nextLine();//读取地图,海水标记为0,陆地标记为1for(int i=0;i<m;i++) {line = in.nextLine(); //读取一行数字转化为数组for(int j=0;j<n;j++) {tmp = Integer.valueOf(line.substring(j, j+1));if(tmp!=0) {map[i][j] = 1;}}}for(int i=0;i<m;i++) {for(int j=0;j<n;j++) {if(map[i][j]!=0) {sum++;BFS(i,j);}}}System.out.println(sum);}/*** 广度优先搜索获得陆地个数* @param map*/private static void BFS(int i, int j) {if(i<0 || j<0|| i>=m || j>=n || map[i][j]==0) { //某个结点为海水直接结束return;}map[i][j] = 0;BFS(i-1,j); //向上查找BFS(i+1,j); //向下查找BFS(i,j-1); //向左查找BFS(i,j+1); //向右查找}
}

4. 测试

输入标准数据测试,3行11列的数据,得到结果为5块陆地。

为了测试算法的正确性,又输入了特殊值进行验证,输入一组1行11列的数据,经检验,结果正确。

航拍地图问题(细胞问题)相关推荐

  1. bigemap中下载边界_高清卫星地图:是可以看到人的地图,附下载方法

    在科学技术日新月异的今天,卫星地图的分辨率越来越高,如今我们普通人能够看到的最高清的卫星地图已经达到了0.1m的分辨率(谷歌卫星地图),清晰到可以看到人.树枝,遇到风景好的地方效果堪比看摄影大片,另外 ...

  2. 想请教知者几个地图问题

    从王正鹏先生的博客中发现地理时间中大量很有价值的地图方面应用的. 看来博主应该在这方面有系统和深入的研究.看了关于geoview进入中国的文章后,有几个相关的问题想要请教博主或者是其他先知者. 1.g ...

  3. 地图控件快速入门——控制地图

    当你的网页中包含一个地图,你可以以编程的方式更改地图.您可以更改地图的风格,调整缩放级别,平移地图到新的位置,显示和隐藏默认导航控件,并添加自己的地图控件. 修改地图视图 有几种方法可以以编程方式更改 ...

  4. 微软版Virtual Earth卫星地图教程[from]

    from http://hi.baidu.com/wxdt/blog/item/45faad4bc1de20f083025ce2.html 2006-11-19 00:09 一谈起"虚拟地球 ...

  5. 三维实景地图,挺酷的

    [img]http://www.iteye.com/topics/download/362525cd-9760-43fa-903e-b8c95908733f[/img] 城市吧是在今年7月新上线的一个 ...

  6. 《评人工智能如何走向新阶段》后记(再续16)

    由AI科技大本营下载自视觉中国 181.5种常见的机器学习方法. (1)线性回归linear regression: 一种流行的回归算法,从样本特征的线性组合,linear combination中学 ...

  7. 为什么在重庆比北京更容易迷路?Nature子刊:大脑GPS系统呈蜂窝状,弯路多了就“变形”...

    郭一璞 十三 发自 凹非寺 量子位 报道 | 公众号 QbitAI 为什么在北京.西安这种道路横平竖直的城市,你更容易分清方向,不容易迷路? 为什么到了重庆.青岛这种道路方向随心所欲的城市,你就晕了? ...

  8. (转)20个令人惊叹的深度学习应用

    写文章 20个令人惊叹的深度学习应用(欢迎补充):Demo+Paper+Code 量子位 1 个月前 唐旭 发自 RUC 量子位 报道 | 公众号 QbitAI 从计算机视觉到自然语言处理,在过去的几 ...

  9. 宝岛探险(C语言 )(DFS+BFS)

    宝岛探险 某岛是由一个主岛和一些附属岛屿组成,小哼决定去某岛探险.下面这个10*10的二维矩阵就是某岛的航拍地图.图中数字表示海拔,0表示海洋,1~9表示陆地.小哼的飞机将会降落在(6,8)处,现在需 ...

最新文章

  1. 数据结构实验之链表九:双向链表
  2. 计算机网络时延图,计算机网络中网站性能延迟加载图像的示例分析
  3. GNN大有可为,从这篇开始学以致用
  4. mysql按月进行表分区
  5. canvas 在线画图
  6. 互联网物流是计算机类吗,那些常常被误解的大学专业,亲戚眼中的修电脑送快递,网友:想哭...
  7. YOLO: Real-Time Object Detection 遇到的问题
  8. oracle表的incremental,ODI IKM Oracle Incremental Update的四种探测处理策略
  9. 初用vue遇到的一些问题
  10. 计算字符串占用字节数
  11. TensorFlow学习日记9
  12. # 2gether 在一起 # 一份生日Party邀请函待查收
  13. 【邢不行|量化小讲堂系列24-Python量化入门】股票自动程序化下单交易 | 视频教程
  14. 正点原子STM32F4探索者开发板HAL库触摸屏例程移植到STM32CubeMX+CLion
  15. 关于公平与公正的感想
  16. 数字X线透视摄影系统 SONIALVISION SMIT/SONIALVISION C200
  17. 一个猜灯谜的游戏(求解)
  18. html鼠标拖尾效果,JavaScript鼠标划过背景拖尾效果
  19. 磁共振t1t2信号记忆顺口溜_MRI的T1和T2
  20. linux监控应用运行情况,技术|在linux中如何通过nload来监控网络使用情况

热门文章

  1. linux 指定网卡发数据,让数据包从指定网卡发送
  2. Mybatis链接PostgreSQL指定schema
  3. css怎么跟html搞一起,css和html的四种结合方式
  4. 尺寸单位rpx和px的区别
  5. “V神给了我1000个ETH, 我用来招了两个程序员” 独立开发者做到极限就是Paul Hauner | 人物志...
  6. 空气过滤器过滤效率如何计算
  7. 爱奇艺登录password参数js解析
  8. NLP-最小编辑距离
  9. Mac 听写输入功能详细介绍:通过语音听写快速输入文本
  10. usb右下角有显示,计算机没显示,插入U盘后电脑桌面右下角的系统任务栏不显示USB图标...