力扣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(附题)相关推荐

  1. 【leetcode】岛屿类问题的通用解法

    在 LeetCode 中,「岛屿问题」是一个系列系列问题,比如 200. 岛屿数量 (Easy) 463. 岛屿的周长 (Easy) 695. 岛屿的最大面积 (Medium) 827. 最大人工岛 ...

  2. 岛屿类问题通用解法与DFS框架

    参考链接: https://leetcode.cn/problems/number-of-islands/solution/dao-yu-lei-wen-ti-de-tong-yong-jie-fa- ...

  3. 岛屿类-网格类问题-DFS | 力扣200. 岛屿数量

    本文讲解200. 岛屿数量问题,属于常见的岛屿类-网格类问题 本题使用DFS的思想 1 题目 给你一个由 '1'(陆地)和 '0'(水)组成的的二维网格,请你计算网格中岛屿的数量. 岛屿总是被水包围, ...

  4. 岛屿类-网格类问题-DFS | 力扣695. 岛屿的最大面积

    思路参考上文: 岛屿类-网格类问题-DFS | 力扣200. 岛屿数量 本文讲解695. 岛屿的最大面积问题,属于常见的岛屿类-网格类问题 本题使用DFS的思想 题目 给定一个包含了一些 0 和 1 ...

  5. 【强烈推荐】如何解决JQuery类Post方式的跨域问题 - 空山雪林通用模块设计工作室 - ITeye技术网站...

    [强烈推荐]如何解决JQuery类Post方式的跨域问题 - 空山雪林通用模块设计工作室 - ITeye技术网站 [强烈推荐]如何解决JQuery类Post方式的跨域问题 博客分类:核心代码片段 jQ ...

  6. RecyclerView 复用错乱通用解法

    RecyclerView 复用错乱通用解法 本文原创,转载请注明出处. 欢迎关注我的 简书 ,关注我的专题 Android Class 我会长期坚持为大家收录简书上高质量的 Android 相关博文. ...

  7. leetcode岛屿类问题

    岛屿类问题 问题基础 如何在二维矩阵中使用 DFS 搜索呢?如果你把二维矩阵中的每一个位置看做一个节点,这个节点的上下左右四个位置就是相邻节点,那么整个矩阵就可以抽象成一幅网状的「图」结构. 根据二叉 ...

  8. 最多7次比较解决5个数的排序问题的解法

    最多7次比较解决5个数的排序问题的解法 参考文章: (1)最多7次比较解决5个数的排序问题的解法 (2)https://www.cnblogs.com/Colin-Cai/p/7739917.html ...

  9. ML之NN:利用神经网络的BP算法解决XOR类(异或非)问题(BP solve XOR Problem)

    ML之NN:利用神经网络的BP算法解决XOR类(异或非)问题(BP solve XOR Problem) 目录 输出结果 实现代码 输出结果 实现代码 #BP solve XOR Problem im ...

最新文章

  1. 安装Ubuntu 14.04后要做的5件事情
  2. C语言中为什么要使用enum
  3. 《JavaScript 高级程序设计》笔记 第7章及以后
  4. [RabbitMQ]消息应答概念_消息手动应答代码
  5. docker修改镜像的存储位置_云原生存储详解:容器存储与 K8s 存储卷(内含赠书福利)...
  6. html5 video 直播流无声音,【报Bug】html5plus 使用 VideoPlayer 播放部分rtmp没有声音
  7. 使用CSS3改变文本选中的默认颜色
  8. Doris之数据模型的选择建议
  9. 中国好声音不如有中国好创意
  10. 遗传算法的简介与应用详细过程
  11. 数据包络(DEA)分析法python实现
  12. ssh实现远程登录服务器
  13. 吉他入门教程——记忆音阶的两种方法
  14. 我的世界服务器反作弊不起作用,[优化][反作弊]NeverLag——优化性能、防作弊、修复MC漏洞、限制刷物品[1.6.4-1.8.7]...
  15. 解决VMware和VMbox实体机和虚拟机无法复制粘贴的问题
  16. 树莓派+SSH反向代理实现远程开机
  17. 什么是知识,什么是知识图谱,有什么作用,有哪些应用领域?
  18. 自学Python 64 使用Python语言收发电子邮件
  19. CSS——高度塌陷以及解决方法
  20. JavaScript 高级程序设计

热门文章

  1. 开好会议有诀窍------(转)
  2. Bailian4036 计算系数【数学+迭代】
  3. UVA11968 In The Airport【最值】
  4. HDU2092 整数解【暴力+韦达定理】
  5. Bailian4071 查找出现了k次的字符【字符串】
  6. HDU2030 汉字统计【入门】
  7. POJ3069 Saruman's Army【贪心】
  8. Spring 框架学习 —— 容器
  9. matlab 时频分析(短时傅里叶变换、STFT)
  10. 词汇的积累与遣词造句 —— 准确的表达、新鲜的词汇