//给定一个用 n*m 矩阵表示的群岛的地图,其中 1 表示岛屿, 0 表示海洋,每个岛屿的水平或竖直方向相邻的岛屿可以视为连在一起的岛屿,每一块岛屿视为面积为 1 ,请问面积最大的岛屿是多少。
//方法关键:深度优先遍历、边界检测
void IslandDFS(vector<vector<int> >& grid, int row, int col, int& n, int& m, int &num)
{
++num;//该区域加一
grid[row][col] = 0;//表示以检查
if (row > 0 && grid[row - 1][col] == 1)//检测左边
{
IslandDFS(grid, row - 1, col, n, m, num);
}
if (row < n && grid[row + 1][col] == 1)//检测右边
{
IslandDFS(grid, row + 1, col, n, m, num);
}
if (col > 0 && grid[row][col - 1] == 1)//检测上边
{
IslandDFS(grid, row, col - 1, n, m, num);
}
if (col < m && grid[row][col + 1] == 1)//检测下面
{
IslandDFS(grid, row, col + 1, n, m, num);
}
}
int maxAreaIsland(vector<vector<int> >& grid)
{
int n = grid.size() - 1;
if (n < 0) return 0;
int m = grid[0].size() - 1;
int result = 0;
//遍历检测每个点
for (int row = 0; row <= n; row++)
{
for (int col = 0; col <= m; col++)
{
if (grid[row][col])//将该包含该点的区域的面积
{
int areaNum = 0;
IslandDFS(grid, row, col, n, m, areaNum);
if (areaNum > result) result = areaNum;
}
}
}
return result;
}