leetcode--200. 岛屿的个数
给定一个由 '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. 岛屿的个数相关推荐
- leetcode 200岛屿的个数
主要考察图搜索: 方法一:染色法,时间O(mn) 遍历一遍,再通过BFS或DFS将所有临近岛屿染色,使用dfs时将numIslands中的bfs换成dfs即可: /***** 遍历所有的点:只要遇见陆 ...
- Leetcode 200.岛屿数量
Time: 20190902 Type: Medium 题目描述 给定一个由 '1'(陆地)和 '0'(水)组成的的二维网格,计算岛屿的数量.一个岛被水包围,并且它是通过水平方向或垂直方向上相邻的陆地 ...
- 【LeetCode】200. 岛屿的个数
题目 给定一个由 '1'(陆地)和 '0'(水)组成的的二维网格,计算岛屿的数量.一个岛被水包围,并且它是通过水平方向或垂直方向上相邻的陆地连接而成的.你可以假设网格的四个边均被水包围. 示例 1:输 ...
- leetcode 200.岛屿数量 c代码
题目如下: 给定一个由 '1'(陆地)和 '0'(水)组成的的二维网格,计算岛屿的数量.一个岛被水包围,并且它 是通过水平方向或垂直方向上相邻的陆地连接而成的.你可以假设网格的四个边均被水包围.示例一 ...
- LeetCode 200. 岛屿数量(图的遍历)
文章目录 1. 题目信息 2. 解题 2.1 DFS 2.2 BFS 1. 题目信息 给定一个由 '1'(陆地)和 '0'(水)组成的的二维网格,计算岛屿的数量.一个岛被水包围,并且它是通过水平方向或 ...
- leetcode —— 200. 岛屿数量
给定一个由 '1'(陆地)和 '0'(水)组成的的二维网格,计算岛屿的数量.一个岛被水包围,并且它是通过水平方向或垂直方向上相邻的陆地连接而成的.你可以假设网格的四个边均被水包围. 示例 1: 输入: ...
- Leetcode 200. 岛屿数量 解题思路及C++实现
解题思路: 典型的深度优先搜索问题,跟第130题 被围绕的区域 有点像,只不过这里不仅要找出被水包围的岛屿,还要计算这些岛屿的总数. 使用深度优先搜索的方法,大循环是遍历整个grid数组(两个for循 ...
- Leetcode 200 岛屿数量 (每日一题 20210720)
给你一个由 '1'(陆地)和 '0'(水)组成的的二维网格,请你计算网格中岛屿的数量.岛屿总是被水包围,并且每座岛屿只能由水平方向和/或竖直方向上相邻的陆地连接形成.此外,你可以假设该网格的四条边均被 ...
- Javascript(JS) leetcode 200. 岛屿数量
给你一个由 '1'(陆地)和 '0'(水)组成的的二维网格,请你计算网格中岛屿的数量. 岛屿总是被水包围,并且每座岛屿只能由水平方向和/或竖直方向上相邻的陆地连接形成. 此外,你可以假设该网格的四条边 ...
- 广度优先搜索——岛屿数量(Leetcode 200)
题目选自Leetcode 200. 岛屿数量 经典的搜索题,求岛屿数量 这里我用的是广度优先搜索BFS 最朴素的方法, 虽然效率不高,但是简单易懂 主要的问题在于:如何确定有多少个岛屿? 每次对一个& ...
最新文章
- 服务器修改mime类型,服务器上没有设置mime类型
- 剑指Offer面试题:4.从尾到头打印链表
- P2522 HAOI2011 Problem b [莫比乌斯反演,数论分块]
- 网关到底是什么?协议转换器是网关吗?
- Android几秒后自动关闭dialog
- asp.net mysql所有数据库_asp.net 如何获取sql数据库所有列名称
- 《淘宝网开店 拍摄 修图 设计 装修 实战150招》一一1.15 如何掌握拍摄方向
- win10+Ubuntu16.04双系统安装——史上最稳总结,排除一切花里花哨
- 同样当程序员,产值是比别人多出5倍以上,拿的工资是别人的2/3左右,你是领导你会怎么样妥善处理?...
- CGAffineTransformMakeRotation 实现旋转
- pointnet源码阅读:model
- xp访问计算机组提示没有权限,WindowsXP系统提示没有权限使用网络怎么办
- 第3章 Linux内核调试手段之内核打印
- 关于征集参与团体标准起草单位的通知的各地奖励政策汇总
- 【Sofice小司笔记】2 算法与数据结构,各类基础及常用高级数据结构、各种搜索方法、动态规划、字符串、数论、编码学、排序等,大部分都基于java实现
- 讨论一下微信小程序中如何长按识别图片中二维码跳转
- 回顾丨2022隐私计算融合区块链技术论坛(附视频+演讲PPT)
- python输出图片到word_python将文本转换成图片输出的方法
- 你不知道的Redis数据结构
- AttributeError: 'module' object has no attribute 'get_frontal_face_detector'
热门文章
- Sqlserver中char,nchar,varchar与Nvarchar的区别
- EV3 直接命令 - 第 4 课 用两个驱动轮精确地移动小车
- 网骗欺诈?网络裸奔?都是因为 HTTP?
- 常见的反爬手段和解决思路
- QUIC实战(五) 使用nginx quic开发分支部署支持HTTP3 的NGINX
- 一文讲懂什么是三层交换机、网关、DNS、子网掩码、MAC地址
- 摩尔投票法(力扣- -229. 求众数 II)
- 【专题介绍】视频内容生产与消费创新(Part2)
- 一种全新的点击率建模方案
- 腾讯iOA零信任安全——IT变革下的新一代企业网