zoukankan      html  css  js  c++  java
  • [LeetCode 695] Max Area of Island 岛的最大面积

    1. DFS 

    从一个节点出发,使用 DFS 对一个图进行遍历时,能够遍历到的节点都是从初始节点可达的,DFS 常用来求解这种 可达性 问题。

    在程序实现 DFS 时需要考虑以下问题:

    • 栈:用栈来保存当前节点信息,当遍历新节点返回时能够继续遍历当前节点。可以使用递归栈(递归函数调用)。
    • 标记:和 BFS 一样同样需要对已经遍历过的节点进行标记。
       1 #include<bits/stdc++.h>
       2 using namespace std;
       3 
       4 class Solution {
       5 public:
       6     int maxAreaOfIsland(vector<vector<int>>& grid) {   
       7         int res = 0;
       8         for(int i = 0;i<grid.size();++i)
       9            for(int j = 0; j< grid[0].size();++j)
      10            {
      11                res = max(dfs(grid,i,j),res);
      12            }
      13         return res;
      14     }
      15 private:
      16     int dfs(vector<vector<int>>& grid,int x,int y)
      17     {
      18         if(!(x>=0&&x<grid.size()&&y>=0&&y<grid[0].size())) return 0;//先判断数组下表,防止出现数组越界错误
      19         if(grid[x][y]==0) return 0;
      20         grid[x][y]=0;//复用grid[][]作为标记数组,降低空间复杂度为O(1)
      21         return 1+dfs(grid,x,y-1)+dfs(grid,x,y+1)+dfs(grid,x-1,y)+dfs(grid,x+1,y);
      22     }
      23 };
  • 相关阅读:
    置顶功能改进
    Skin设计小组新作品发布—绿草蓝天
    代码着色功能改进
    增加了将文章收藏至网摘的功能
    [公告]C++博客开通
    [新功能]显示文章所属分类
    新Skin发布
    北京.NET俱乐部活动公告
    正式开始学习.NET 2.0
    关于共同学习.NET 2.0的想法
  • 原文地址:https://www.cnblogs.com/wangxf2019/p/12681500.html
Copyright © 2011-2022 走看看