//给定一个用 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; }