解决岛屿类问题(网格)通用解法DFS(附题)
力扣695
class Solution {
public:bool check(vector<vector<int>>&grid,int r,int c){return 0<=r&&r<grid.size()&&0<=c&&c<grid[0].size();}//直接用1一个return判断是否符合int max_area=0;int area;//写两个全局变量,遍历之前area置0,每遍历一个格子area+1,一次调用结束,更新max_areavoid dfs(vector<vector<int>>&grid,int r,int c){if(!check(grid,r,c))return;if(grid[r][c]!=1)return;area++;grid[r][c]=2;dfs(grid,r-1,c);dfs(grid,r+1,c);dfs(grid,r,c-1);dfs(grid,r,c+1);}int maxAreaOfIsland(vector<vector<int>>& grid) {
int row=grid.size();
int col=grid[0].size();for(int i=0;i<row;i++)
{for(int j=0;j<col;j++){if(grid[i][j]==1){area=0;dfs(grid,i,j);max_area=max(area,max_area);}}
}
return max_area;}
};
200. 岛屿数量
用全局变量count,记录dfs调用的次数,即为岛屿的个数
class Solution {
public:int count=0;bool check(vector<vector<char>>& grid,int r,int c){return 0<=r&&r<grid.size()&&c>=0&&c<grid[0].size();}void dfs(vector<vector<char>>& grid,int r,int c){if(!check(grid,r,c)){return;}if(grid[r][c]!='1')return;grid[r][c]='2';dfs(grid,r+1,c);dfs(grid,r-1,c);dfs(grid,r,c+1);dfs(grid,r,c-1);}int numIslands(vector<vector<char>>& grid) {int row=grid.size();int col=grid[0].size();for(int i=0;i<row;i++){for(int j=0;j<col;j++){if(grid[i][j]=='1'){count++;dfs(grid,i,j);}}}return count;}
};
63. 岛屿的周长
带参数的dfs
int dfs(grid,r,c)以(r,c)为起点遍历岛屿周长
观察当结点有4个邻接点的时候,周长算0
有3个邻接点时,周长算1,
.......
所以要讨论邻接点的个数(注意修改为2后也算邻接点)
class Solution {
public:
bool check(vector<vector<int>>& grid,int r,int c)
{return 0<=r&&r<grid.size()&&c>=0&&c<grid[0].size();
}int dfs(vector<vector<int>>& grid,int r,int c){if(!check(grid,r,c))return 0; if(grid[r][c]!=1)return 0;//如果有(r,c)有4个邻接结点,return 0+dfs()....//如果......有3个邻接顶点,return 1+dfs()//.....grid[r][c]=2;int count=4;if(r-1>=0&&(grid[r-1][c]==1||grid[r-1][c]==2))count--;if(c-1>=0&&(grid[r][c-1]==1||grid[r][c-1]==2))count--;if(r+1<grid.size()&&(grid[r+1][c]==1||grid[r+1][c]==2))count--;if(c+1<grid[0].size()&&(grid[r][c+1]==1||grid[r][c+1]==2))count--;return count+dfs(grid,r-1,c)+dfs(grid,r+1,c)+dfs(grid,r,c-1)+dfs(grid,r,c+1);}int islandPerimeter(vector<vector<int>>& grid) {
int row=grid.size();
int col=grid[0].size();
int ans=0;
for(int i=0;i<row;i++)
{for(int j=0;j<col;j++){if(grid[i][j]==1){ans=dfs(grid,i,j);}}
}
return ans;
}
};
参考
:力扣
解决岛屿类问题(网格)通用解法DFS(附题)相关推荐
- 【leetcode】岛屿类问题的通用解法
在 LeetCode 中,「岛屿问题」是一个系列系列问题,比如 200. 岛屿数量 (Easy) 463. 岛屿的周长 (Easy) 695. 岛屿的最大面积 (Medium) 827. 最大人工岛 ...
- 岛屿类问题通用解法与DFS框架
参考链接: https://leetcode.cn/problems/number-of-islands/solution/dao-yu-lei-wen-ti-de-tong-yong-jie-fa- ...
- 岛屿类-网格类问题-DFS | 力扣200. 岛屿数量
本文讲解200. 岛屿数量问题,属于常见的岛屿类-网格类问题 本题使用DFS的思想 1 题目 给你一个由 '1'(陆地)和 '0'(水)组成的的二维网格,请你计算网格中岛屿的数量. 岛屿总是被水包围, ...
- 岛屿类-网格类问题-DFS | 力扣695. 岛屿的最大面积
思路参考上文: 岛屿类-网格类问题-DFS | 力扣200. 岛屿数量 本文讲解695. 岛屿的最大面积问题,属于常见的岛屿类-网格类问题 本题使用DFS的思想 题目 给定一个包含了一些 0 和 1 ...
- 【强烈推荐】如何解决JQuery类Post方式的跨域问题 - 空山雪林通用模块设计工作室 - ITeye技术网站...
[强烈推荐]如何解决JQuery类Post方式的跨域问题 - 空山雪林通用模块设计工作室 - ITeye技术网站 [强烈推荐]如何解决JQuery类Post方式的跨域问题 博客分类:核心代码片段 jQ ...
- RecyclerView 复用错乱通用解法
RecyclerView 复用错乱通用解法 本文原创,转载请注明出处. 欢迎关注我的 简书 ,关注我的专题 Android Class 我会长期坚持为大家收录简书上高质量的 Android 相关博文. ...
- leetcode岛屿类问题
岛屿类问题 问题基础 如何在二维矩阵中使用 DFS 搜索呢?如果你把二维矩阵中的每一个位置看做一个节点,这个节点的上下左右四个位置就是相邻节点,那么整个矩阵就可以抽象成一幅网状的「图」结构. 根据二叉 ...
- 最多7次比较解决5个数的排序问题的解法
最多7次比较解决5个数的排序问题的解法 参考文章: (1)最多7次比较解决5个数的排序问题的解法 (2)https://www.cnblogs.com/Colin-Cai/p/7739917.html ...
- ML之NN:利用神经网络的BP算法解决XOR类(异或非)问题(BP solve XOR Problem)
ML之NN:利用神经网络的BP算法解决XOR类(异或非)问题(BP solve XOR Problem) 目录 输出结果 实现代码 输出结果 实现代码 #BP solve XOR Problem im ...
最新文章
- 安装Ubuntu 14.04后要做的5件事情
- C语言中为什么要使用enum
- 《JavaScript 高级程序设计》笔记 第7章及以后
- [RabbitMQ]消息应答概念_消息手动应答代码
- docker修改镜像的存储位置_云原生存储详解:容器存储与 K8s 存储卷(内含赠书福利)...
- html5 video 直播流无声音,【报Bug】html5plus 使用 VideoPlayer 播放部分rtmp没有声音
- 使用CSS3改变文本选中的默认颜色
- Doris之数据模型的选择建议
- 中国好声音不如有中国好创意
- 遗传算法的简介与应用详细过程
- 数据包络(DEA)分析法python实现
- ssh实现远程登录服务器
- 吉他入门教程——记忆音阶的两种方法
- 我的世界服务器反作弊不起作用,[优化][反作弊]NeverLag——优化性能、防作弊、修复MC漏洞、限制刷物品[1.6.4-1.8.7]...
- 解决VMware和VMbox实体机和虚拟机无法复制粘贴的问题
- 树莓派+SSH反向代理实现远程开机
- 什么是知识,什么是知识图谱,有什么作用,有哪些应用领域?
- 自学Python 64 使用Python语言收发电子邮件
- CSS——高度塌陷以及解决方法
- JavaScript 高级程序设计