DFS例题:力扣695:岛屿的最大面积
本题计算最大的岛屿面积,我们用dfs来深搜每个岛,并在每次dfs之前定义s来计算每个岛的面积,并同时更新最大值,我们将地图二维数组和每个点的x、y和s传入dfs函数,在第一个函数里的每一次dfs,就是一座新的岛屿
在dfs中我们进行点的不合法判断且回溯,并修改遍历过的1改为0,然后将此岛屿面积s++,在dfs里的递归dfs调用是寻找同一座岛屿的相连感染部分。
1 class Solution { 2 public: 3 int maxnum=0; 4 int maxAreaOfIsland(vector<vector<int>>& grid) { 5 if(grid.size()==0) 6 return 0; 7 for(int i=0;i<grid.size();i++){ 8 for(int j=0;j<grid[0].size();j++){ 9 int s=0;//在dfs之前创建一个s来记录每个岛屿的面积 10 dfs(grid,i,j,s);//此函数里的每dfs一次,就是一个岛屿 11 maxnum=max(maxnum,s);//并更新最大值 12 } 13 } 14 return maxnum; 15 } 16 void dfs(vector<vector<int>>& grid,int i,int j,int &s){ 17 if(i<0||j<0||i>=grid.size()||j>=grid[0].size()||grid[i][j]==0) return ;//不合法判断并回溯 18 grid[i][j]=0;//将遍历过的点化为0,且s++ 19 s++; 20 //深搜“感染”区域,此处的深搜是寻找同一座岛的相连感染区域 21 dfs(grid,i+1,j,s); 22 dfs(grid,i-1,j,s); 23 dfs(grid,i,j+1,s); 24 dfs(grid,i,j-1,s); 25 return; 26 } 27 };