• 695. Max Area of Island


    问题:

    给定一个由0,1 组成的二维数组,0代表海水,1代表陆地,

    求给定数组所形成小岛的最大面积。

    Example 1:
    [[0,0,1,0,0,0,0,1,0,0,0,0,0],
     [0,0,0,0,0,0,0,1,1,1,0,0,0],
     [0,1,1,0,1,0,0,0,0,0,0,0,0],
     [0,1,0,0,1,1,0,0,1,0,1,0,0],
     [0,1,0,0,1,1,0,0,1,1,1,0,0],
     [0,0,0,0,0,0,0,0,0,0,1,0,0],
     [0,0,0,0,0,0,0,1,1,1,0,0,0],
     [0,0,0,0,0,0,0,1,1,0,0,0,0]]
    Given the above grid, return 6. Note the answer is not 11, because the island must be connected 4-directionally.
    
    Example 2:
    [[0,0,0,0,0,0,0,0]]
    Given the above grid, return 0.
    
    Note: The length of each dimension in the given grid does not exceed 50.
    

      

    解法:DFS

    深度优先递归

    标记已遍历过为0:  grid[i][j]=0;

    向四个方向逐次探索,若不满足条件:超出数组范围or为海水节点0,则直接返回当前面积为0

    否则当前面积为1,在以当前节点为轴心,再次向四周探索。每个方向的结果累加,最后返回总面积。

    在最外层,顺次遍历整个给定数组,只对 未曾访问过&&陆地节点(grid[i][j]=1)的节点进行上述递归处理。

    代码参考:

     1 class Solution {
     2 public:
     3     int dfs(vector<vector<int>>& grid, int n, int m, int i, int j){
     4         if(i<0 || i>=n || j<0 || j>=m || grid[i][j] == 0) return 0;
     5         grid[i][j]=0;
     6         int area=1;
     7         area+=dfs(grid, n, m, i-1, j);
     8         area+=dfs(grid, n, m, i+1, j);
     9         area+=dfs(grid, n, m, i, j-1);
    10         area+=dfs(grid, n, m, i, j+1);
    11         return area;
    12     }
    13     int maxAreaOfIsland(vector<vector<int>>& grid) {
    14         int res=0;
    15         if(grid.size()==0)return 0;
    16         int n=grid.size(), m=grid[0].size();
    17         for(int i=0; i<n; i++){
    18             for(int j=0; j<m; j++){
    19                 if(grid[i][j]==1){
    20                     res=max(res,dfs(grid, n, m, i, j));
    21                 }
    22             }
    23         }
    24         return res;
    25     }
    26 };
  • 相关阅读:
    鼠标移到某个对象上,显示小手的形状
    前端开发过程中的一些小知识点总结
    滚动新闻插件vticker
    tab选项卡
    给SqlParameter参数指定或不指定:@变量标识符的区别是什么?
    c# 一个记录日志的通用方法
    DataTable和实体类通过反射相互转换
    通过计算获得一个使用最少量充值卡满足充值额度的方案
    动态规划问题
    DFS排列组合问题
  • 原文地址:https://www.cnblogs.com/habibah-chang/p/12737426.html
Copyright © 2020-2023  润新知