C++ 岛屿的最大面积

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

 

posted @ 2021-12-27 15:56  mshentai  阅读(504)  评论(0编辑  收藏  举报