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

 

posted @ 2020-10-09 22:59  nilbook  阅读(170)  评论(0编辑  收藏  举报