1. 题目
2. 解题思路(DFS)
以迭代中遇到的1为起点向四周进行深度优先搜索,把搜索过的位置置0
3. 代码
class Solution {
public:
int maxAreaOfIsland(vector<vector<int>>& grid) {
int max_ans = 0;
// 在矩阵中按行搜索 1
for(int i = 0; i < grid.size(); i++){
for(int j = 0; j < grid[0].size(); j++){
// 若找到,则以该位置为起点,向四周进行深度优先搜索相连位置
if(grid[i][j]){
// cout<<i<<" "<<j<<" "<<grid[i][j]<<" "<<max_ans<<endl;
int temp = dfs(i, j, 0, grid);
if(temp > max_ans){
max_ans = temp;
} // 记录岛屿大小
}
}
}
return max_ans;
}
int dfs(int i, int j, int size, vector<vector<int>>& grid){
// 越界判断 * 1判断
if(i >= 0 && j >= 0 && i < grid.size() && j < grid[0].size() && grid[i][j]){
// 面积加1 * 位置置0 标记已搜索
size += 1; grid[i][j] = 0;
// cout<<"="<<i<<" "<<j<<" "<<grid[i][j]<<" "<<size<<endl;
// 向四周搜索
size = dfs(i - 1, j, size, grid);
size = dfs(i + 1, j, size, grid);
size = dfs(i, j - 1, size, grid);
size = dfs(i, j + 1, size, grid);
}
return size;
}
};