给定一个由 '1'(陆地)和 '0'(水)组成的的二维网格,计算岛屿的数量。一个岛被水包围,并且它是通过水平方向或垂直方向上相邻的陆地连接而成的。你可以假设网格的四个边均被水包围。

示例 1:

输入:
11110
11010
11000
00000输出: 1

示例 2:

输入:
11000
11000
00100
00011输出: 3

题目分析:有字符‘0’代表水,‘1’代表陆地,岛屿指的是一个或者一片陆地相邻形成的区域,所以题目要求的岛屿个数,实际上求的是所有不相邻的1的个数,相邻指的是上下左右。理解了题目的意思,那么这一题我们很明显可以利用广度优先遍历法来实现这个问题。

代码分析:我们需要定义一个数组visited来判断当前的元素是否已经被访问了,如果被访问了则为true,如果没有被访问则为false. 那么我们判断当前元素是否为1,如果为1,则看它的相邻位置是否为‘1’,一直到把所有连通域里面的‘1’访问结束后,res++。

class Solution {
public:int numIslands(vector<vector<char> > &grid) {if(grid.empty()||grid[0].empty()) return 0;int row=grid.size();int col=grid[0].size();int res=0;vector<vector<bool>>visited(row,vector<bool>(col,false)); //初始化visited数组为falsefor(int i=0;i<row;i++){for(int j=0;j<col;j++){if(grid[i][j]==1&&!visited){numIslandsDFS(grid,visited,i,j);res++;}}}return  res;
}numIslandsDFS(vector<vector<char>&grid, vector<bool> visited, int x,int y){if(x<0||x>grid.size()) return;if(y<0||y>grid[0].size()) return;if(grid[x][y]!=1||visited) return;visited[x][y]=true;numsIslandDFS(grid, visited,x-1,y);numsIslandDFS(grid, visited,x+1,y);numsIslandDFS(grid, visited,x,y-1);numsIslandDFS(grid, visited,x,y+1);
}
};

leetcode 岛屿的个数相关推荐

  1. 岛屿的个数number-of-islands

    给一个01矩阵,求不同的岛屿的个数. 0代表海,1代表岛,如果两个1相邻,那么这两个1属于同一个岛.我们只考虑上下左右为相邻. 样例 在矩阵: [[1, 1, 0, 0, 0],[0, 1, 0, 0 ...

  2. lintcode433 岛屿的个数

    岛屿的个数 给一个01矩阵,求不同的岛屿的个数. 0代表海,1代表岛,如果两个1相邻,那么这两个1属于同一个岛.我们只考虑上下左右为相邻. 您在真实的面试中是否遇到过这个题? Yes 样例 在矩阵: ...

  3. lintcode:Number of Islands 岛屿的个数

    题目: 岛屿的个数 给一个01矩阵,求不同的岛屿的个数. 0代表海,1代表岛,如果两个1相邻,那么这两个1属于同一个岛.我们只考虑上下左右为相邻. 样例 在矩阵: [[1, 1, 0, 0, 0],[ ...

  4. LintCode 433. 岛屿的个数 JavaScript算法

    描述 给一个 01 矩阵,求不同的岛屿的个数. 0 代表海,1 代表岛,如果两个 1 相邻,那么这两个 1 属于同一个岛.我们只考虑上下左右为相邻. 样例 - 样例 1:输入: [[1,1,0,0,0 ...

  5. LintCode 岛屿的个数

    题目: 给一个01矩阵,求不同的岛屿的个数. 0代表海,1代表岛,如果两个1相邻,那么这两个1属于同一个岛.我们只考虑上下左右为相邻. 样例 在矩阵: [[1, 1, 0, 0, 0],[0, 1, ...

  6. 九章算法面试题81 岛屿的个数

    原文网址: www.jiuzhang.com 问题详情 给一个01矩阵,求不同的岛屿的个数. 0代表海,1代表岛,如果两个1相邻,那么这两个1属于同一个岛.我们只考虑上下左右为相邻. 在线评测本题: ...

  7. Leetcode——岛屿问题

    1.前置 先明确一下岛屿问题中的网格结构是如何定义的,网格问题是由 m×n 个小方格组成一个网格,每个小方格与其上下左右四个方格认为是相邻的,要在这样的网格上进行某种搜索. 岛屿问题是一类典型的网格问 ...

  8. leetcode 200岛屿的个数

    主要考察图搜索: 方法一:染色法,时间O(mn) 遍历一遍,再通过BFS或DFS将所有临近岛屿染色,使用dfs时将numIslands中的bfs换成dfs即可: /***** 遍历所有的点:只要遇见陆 ...

  9. 【LeetCode】200. 岛屿的个数

    题目 给定一个由 '1'(陆地)和 '0'(水)组成的的二维网格,计算岛屿的数量.一个岛被水包围,并且它是通过水平方向或垂直方向上相邻的陆地连接而成的.你可以假设网格的四个边均被水包围. 示例 1:输 ...

最新文章

  1. 少年五年升阿里P8,他如何从低谷登上“光明顶”?
  2. Malformed server response 解决方案
  3. java例子:九九乘法表
  4. java为什么全是乱码_java一切乱码的解释 以及源头
  5. 了解java虚拟机mdash;垃圾回收算法(5)
  6. access字段类型varchar_数据库即将被淘汰的几种数据类型,烦恼还是解脱?
  7. 51nod-1131: 覆盖数字的数量
  8. HTTP协议——学习资料小结
  9. 继承学习第一天 共有派生
  10. 《SpringMVC视频教程》(p2~p3)
  11. 尽在双11:阿里巴巴技术演进与超越
  12. Google play上架被拒踩坑系列
  13. lighttpd服务器404页修改,教你学会Lighttpd的安装配置
  14. html中易混淆的offset、client、scroll
  15. 总结:工作流,页面流,逻辑流(业务流)
  16. hive 修改cluster by算法_疯狂Hive之DML操作(四)
  17. 苦刷面试题七天七夜,四面蚂蚁,百度双双通过,最终选择了腾讯!
  18. SIMT与SIMD的区别?
  19. 传奇服务器怎么设置状态是开区还是合区,手游【幽冥传奇】开服合区教程
  20. 【1170】计算2的N次方

热门文章

  1. 《零基础看得懂的C++入门教程 》——(6)自己动手写个函数
  2. 直方图python高度_python – 子图中直方图的动画
  3. 她花了8个月让骗子爱上自己,然后把骗子引到警察局......
  4. 你初吻啥时候没有的​?​
  5. 足不出户,游遍七大洲,不可错过的14部地理纪录片!
  6. 单身两年以上是什么体验?
  7. 男科医生到底有多不正经… | 今日最佳
  8. 全球100款大数据工具汇总(前50款)
  9. 马云害怕的事还是发生了
  10. 服务器文件每天备份重新命名,定时备份服务器文件至本地电脑