[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 };