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

示例 1:

输入:
11110
11010
11000
00000输出: 1

示例 2:

输入:
11000
11000
00100
00011输出: 3

第一版:

其实是对的!!但是因为我把vis数组的赋值括号写成了{}导致一直出错。。。 枯了!

这种错误!!!!!

class Solution {    int d[4][2] = {{-1,0}, {1,0}, {0,-1}, {0,1}}; //方向数组public:int numIslands(vector<vector<char>>& grid) {if (grid.empty()) return 0;int count = 0;//访问数组int row = grid.size();int col = grid[0].size();vector<vector<bool>> vis(row, vector<bool>(col,false));for(int i = 0; i < row; i++){for(int j = 0; j < col; j++){if(vis[i][j] == false && grid[i][j] == '1')  //没有被访问过,进行深搜{dfs(i,j,grid,vis);count++;}  }}   return count;}void dfs(int x, int y, vector<vector<char>>& grid, vector<vector<bool>>& vis){int r = grid.size();int c = grid[0].size();if(x < 0 || x >= r || y < 0 || y >= c || grid[x][y] == '0' || vis[x][y] == true) return;vis[x][y] = true;for(int i = 0; i < 4; i++){int dx = x + d[i][0];int dy = y + d[i][1];dfs(dx,dy,grid,vis);}}
};

我的 错误代码:

原因:广搜的数据量太大,导致溢出了。只过了14个点,还有就是,要记得空数组的判别

更新:也是对的,也是因为括号的原因....(佛)

class Solution {    int d[4][2] = {{-1,0}, {1,0}, {0,-1}, {0,1}}; //方向数组int count = 0;struct node{int x, y;}Node;public:int numIslands(vector<vector<char>>& grid) {if(grid.empty() || grid[0].empty()) return 0;//访问数组int row = grid.size();int col = grid[0].size();vector<vector<bool>> vis(row, vector<bool>(col,false));for(int i = 0; i < row; i++){for(int j = 0; j < col; j++){if(grid[i][j] == '1' && vis[i][j] == false){count++;bfs(i,j,grid,vis);}}}return count;}bool judge(int x, int y, vector<vector<char>>& grid, vector<vector<bool>>& vis){int r = grid.size();int c = grid[0].size();if(x < 0 || x >= r || y < 0 || y >= c) return false;if(grid[x][y] == '0' || vis[x][y] == true) return false;return true;}void bfs(int x, int y, vector<vector<char>>& grid, vector<vector<bool>>& vis){queue<node> Q;Node.x = x, Node.y = y;Q.push(Node);vis[x][y] = true;while(!Q.empty()){node top = Q.front();Q.pop();for(int i = 0; i < 4; i++){int dx = top.x + d[i][0];int dy= top.y + d[i][1];if(judge(dx,dy,grid,vis)){Node.x = dx, Node.y = dy;Q.push(Node);vis[dx][dy] = true;}}}}
};

大佬:cannon

class Solution {private:int d[4][2] = {{0, 1}, {1, 0}, {0, -1}, {-1, 0}};int m, n;vector<vector<bool>> visited;bool inArea(int x, int y){return x >= 0 && x < m && y >= 0 && y < n;}// 从grid[x][y]的位置开始,进行floodfill// 保证(x,y)合法,且grid[x][y]是没有被访问过的陆地void dfs(vector<vector<char>>& grid, int x, int y){//assert(inArea(x,y));visited[x][y] = true;for(int i = 0; i < 4; i ++){int newx = x + d[i][0];int newy = y + d[i][1];if(inArea(newx, newy) && !visited[newx][newy] && grid[newx][newy] == '1')dfs(grid, newx, newy);}return;}public:int numIslands(vector<vector<char>>& grid) {m = grid.size();if(m == 0)return 0;n = grid[0].size();if(n == 0)return 0;for(int i = 0 ; i < m ; i ++)visited.push_back(vector<bool>(n, false));int res = 0;for(int i = 0 ; i < m ; i ++)for(int j = 0 ; j < n ; j ++)if(grid[i][j] == '1' && !visited[i][j]){dfs(grid, i, j);res ++;}return res;}
};

leetcode--200. 岛屿的个数相关推荐

  1. leetcode 200岛屿的个数

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

  2. Leetcode 200.岛屿数量

    Time: 20190902 Type: Medium 题目描述 给定一个由 '1'(陆地)和 '0'(水)组成的的二维网格,计算岛屿的数量.一个岛被水包围,并且它是通过水平方向或垂直方向上相邻的陆地 ...

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

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

  4. leetcode 200.岛屿数量 c代码

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

  5. LeetCode 200. 岛屿数量(图的遍历)

    文章目录 1. 题目信息 2. 解题 2.1 DFS 2.2 BFS 1. 题目信息 给定一个由 '1'(陆地)和 '0'(水)组成的的二维网格,计算岛屿的数量.一个岛被水包围,并且它是通过水平方向或 ...

  6. leetcode —— 200. 岛屿数量

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

  7. Leetcode 200. 岛屿数量 解题思路及C++实现

    解题思路: 典型的深度优先搜索问题,跟第130题 被围绕的区域 有点像,只不过这里不仅要找出被水包围的岛屿,还要计算这些岛屿的总数. 使用深度优先搜索的方法,大循环是遍历整个grid数组(两个for循 ...

  8. Leetcode 200 岛屿数量 (每日一题 20210720)

    给你一个由 '1'(陆地)和 '0'(水)组成的的二维网格,请你计算网格中岛屿的数量.岛屿总是被水包围,并且每座岛屿只能由水平方向和/或竖直方向上相邻的陆地连接形成.此外,你可以假设该网格的四条边均被 ...

  9. Javascript(JS) leetcode 200. 岛屿数量

    给你一个由 '1'(陆地)和 '0'(水)组成的的二维网格,请你计算网格中岛屿的数量. 岛屿总是被水包围,并且每座岛屿只能由水平方向和/或竖直方向上相邻的陆地连接形成. 此外,你可以假设该网格的四条边 ...

  10. 广度优先搜索——岛屿数量(Leetcode 200)

    题目选自Leetcode 200. 岛屿数量 经典的搜索题,求岛屿数量 这里我用的是广度优先搜索BFS 最朴素的方法, 虽然效率不高,但是简单易懂 主要的问题在于:如何确定有多少个岛屿? 每次对一个& ...

最新文章

  1. 服务器修改mime类型,服务器上没有设置mime类型
  2. 剑指Offer面试题:4.从尾到头打印链表
  3. P2522 HAOI2011 Problem b [莫比乌斯反演,数论分块]
  4. 网关到底是什么?协议转换器是网关吗?
  5. Android几秒后自动关闭dialog
  6. asp.net mysql所有数据库_asp.net 如何获取sql数据库所有列名称
  7. 《淘宝网开店 拍摄 修图 设计 装修 实战150招》一一1.15 如何掌握拍摄方向
  8. win10+Ubuntu16.04双系统安装——史上最稳总结,排除一切花里花哨
  9. 同样当程序员,产值是比别人多出5倍以上,拿的工资是别人的2/3左右,你是领导你会怎么样妥善处理?...
  10. CGAffineTransformMakeRotation 实现旋转
  11. pointnet源码阅读:model
  12. xp访问计算机组提示没有权限,WindowsXP系统提示没有权限使用网络怎么办
  13. 第3章 Linux内核调试手段之内核打印
  14. 关于征集参与团体标准起草单位的通知的各地奖励政策汇总
  15. 【Sofice小司笔记】2 算法与数据结构,各类基础及常用高级数据结构、各种搜索方法、动态规划、字符串、数论、编码学、排序等,大部分都基于java实现
  16. 讨论一下微信小程序中如何长按识别图片中二维码跳转
  17. 回顾丨2022隐私计算融合区块链技术论坛(附视频+演讲PPT)
  18. python输出图片到word_python将文本转换成图片输出的方法
  19. 你不知道的Redis数据结构
  20. AttributeError: 'module' object has no attribute 'get_frontal_face_detector'

热门文章

  1. Sqlserver中char,nchar,varchar与Nvarchar的区别
  2. EV3 直接命令 - 第 4 课 用两个驱动轮精确地移动小车
  3. 网骗欺诈?网络裸奔?都是因为 HTTP?
  4. 常见的反爬手段和解决思路
  5. QUIC实战(五) 使用nginx quic开发分支部署支持HTTP3 的NGINX
  6. 一文讲懂什么是三层交换机、网关、DNS、子网掩码、MAC地址
  7. 摩尔投票法(力扣- -229. 求众数 II)
  8. 【专题介绍】视频内容生产与消费创新(Part2)
  9. 一种全新的点击率建模方案
  10. 腾讯iOA零信任安全——IT变革下的新一代企业网