1、DFS
我们可以遍历图中的每一个节点,在遍历之后将其值修改为 0 并将当前面积更新为 1 。而后遍历其上下左右四个方向,返回其相邻区域的面积并加上当前的面积,最终返回即可。
值得注意的是,为了避免重复查找相同的节点,我们可以直接修改节点的值来进行避免。
class Solution {
public:
vector<int> dir{-1, 0, 1, 0, -1};
// 辅函数
int dfs(vector<vector<int>> &grid, int r, int c) {
if (grid[r][c] == 0) return 0;
grid[r][c] = 0;
int x, y, area = 1;
for (int i = 0; i < 4; ++i) {
x = r + dir[i], y = c + dir[i + 1];
if (x >= 0 && x < grid.size() && y >= 0 && y < grid[0].size()) {
area += dfs(grid, x, y);
}
}
return area;
}
int maxAreaOfIsland(vector<vector<int>> &grid) {
if (grid.empty() || grid[0].empty()) return 0;
int max_area = 0;
for (int i = 0; i < grid.size(); ++i) {
for (int j = 0; j < grid[0].size(); ++j) {
if (grid[i][j] == 1) {
max_area = max(max_area, dfs(grid, i, j));
}
}
}
return max_area;
}
};