要求

  • 给定一个二维数组,只有0和1两个字符,1代表陆地,0代表水域,纵向和横向的陆地连接成岛屿,被水域隔开,求出地图中有多少岛屿

思路

  • 对要查找的区域进行双重循环遍历,寻找陆地
  • 从陆地初始点开始进行深度优先遍历
  • 如:从(0,0)开始深度遍历,填充岛屿,(0,1)已经访问过,(0,2)为水域,直到(2,2)再开始深度遍历

实现

  • res:有多少个岛屿
  • 递归条件:在区域内,未被访问过,是陆地
  • 终止条件融入到了if语句中
 1 class Solution {
2
3 private:
4 int d[4][2] = {{0,1},{1,0},{0,-1},{-1,0}};
5 int m,n;
6 vector<vector<bool>> visited;
7
8 bool inArea( int x, int y){
9 return x >= 0 && x < m && y >= 0 && y < n;
10 }
11
12 // 从grid[x][y]开始,进行floodfill
13 // 保证(x,y)合法,且grid[x][y]是没有被访问过的陆地
14 void dfs( vector<vector<char>>& grid, int x, int y ){
15
16 visited[x][y] = true;
17 for( int i = 0 ; i < 4 ; i ++ ){
18 int newx = x + d[i][0];
19 int newy = y + d[i][1];
20 // if语句保证访问合法,不需再写递归终止条件
21 if( inArea(newx, newy) && !visited[newx][newy] && grid[newx][newy] == '1')
22 dfs( grid, newx, newy );
23 }
24 return;
25 }
26
27 public:
28 int numIslands(vector<vector<char>>& grid) {
29 m = grid.size();
30 if( m == 0 )
31 return 0;
32 n = grid[0].size();
33
34 visited = vector<vector<bool>>(m, vector<bool>(n,false));
35
36 int res = 0;
37 for( int i = 0 ; i < m ; i ++ )
38 for( int j = 0 ; j < n ; j ++ )
39 if( grid[i][j] == '1' && !visited[i][j] ){
40 res ++;
41 dfs( grid, i, j );
42 }
43 return res;
44 }
45 };

相关

  • 130 Surrounded Regions
  • 417 Pacific Atlantic Water Flow

最新文章

  1. php中的mysql 和 mysqli 区别
  2. FLEX SharedObject介绍及应用
  3. *nix下传统编程入门之GCC
  4. linux常用命令大全(转)
  5. C#文本文件导入数据库
  6. Product Trader(操盘手)
  7. SQLite的总结与在C#的使用
  8. java Socket实现简单在线聊天(一)
  9. LeetCode算法题-Find Mode in Binary Search Tree(Java实现)
  10. Linux排序不准确的问题,用以下两行代码解决
  11. 洗礼灵魂,修炼python(28)--异常处理(2)—&gt;运用异常
  12. android 混淆 与 反编译
  13. JavaBasic_08
  14. CSS未知宽高元素水平垂直居中
  15. java阻塞队列与非阻塞队列
  16. 3-WIN10系统及开发工具支持
  17. ubuntu-14.04.2-desktop-amd64.iso:ubuntu-14.04.2-desktop-amd64:安装Oracle11gR2
  18. docker学习-docker安装
  19. python 面向对象 公有属性 用在哪里
  20. [温故]图解java多线程设计模式(二)

热门文章

  1. 微信开发者工具导入 wepy 项目“app.json 未找到”报错解决方法
  2. @PostConstruct 使用记录
  3. sql注入之超详细sqlmap使用攻略
  4. MRCTF My secret
  5. 201871010130-周学铭 实验二 个人项目—D{0-1}问题项目报告
  6. JMeter自定义采样器插件开发
  7. 解决Docker MySQL无法被宿主机访问的问题
  8. Day09_41_集合_Set
  9. Python学习从入门到放弃?我不允许!!!
  10. 内网渗透-windows认证