[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 };
posted @ 2020-04-11 18:41  谁在写西加加  阅读(165)  评论(0编辑  收藏  举报