• lintcode-433-岛屿的个数


    433-岛屿的个数

    给一个01矩阵,求不同的岛屿的个数。
    0代表海,1代表岛,如果两个1相邻,那么这两个1属于同一个岛。我们只考虑上下左右为相邻。

    样例

    在矩阵:
    [
    [1, 1, 0, 0, 0],
    [0, 1, 0, 0, 1],
    [0, 0, 0, 1, 1],
    [0, 0, 0, 0, 0],
    [0, 0, 0, 0, 1]
    ]
    中有 3 个岛.

    标签

    脸书 谷歌 Zenefits

    思路

    使用深度优先遍历,如果某点未被遍历过,则表示它处于一个新岛屿上,此时遍历与其在同一岛屿上的点

    code

    class Solution {
    public:
        /**
         * @param grid a boolean 2D matrix
         * @return an integer
         */
        int numIslands(vector<vector<bool>>& grid) {
            // Write your code here
            int sizeRow = grid.size();
            if (sizeRow <= 0) {
                return 0;
            }
            int sizeCol = grid[0].size();
            if (sizeCol <= 0) {
                return 0;
            }
            int count = 0;
            vector<vector<bool>> isVisited(sizeRow, vector<bool>(sizeCol, false));
            for (int i = 0; i < sizeRow; i++) {
                for (int j = 0; j < sizeCol; j++) {
                    if (grid[i][j] == true && !isVisited[i][j]) {
                        numIslands(i, j, grid, isVisited);
                        count++;
                    }
                }
            }
            return count;
        }
    
        void numIslands(int i, int j, vector<vector<bool>> &grid, vector<vector<bool>> &isVisited) {
            if (i < 0 || i >= grid.size()) {
                return;
            }
            if (j < 0 || j >= grid[0].size()) {
                return;
            }
            if (grid[i][j] == false || isVisited[i][j] == true) {
                return;
            }
            isVisited[i][j] = true;
            numIslands(i - 1, j, grid, isVisited);
            numIslands(i + 1, j, grid, isVisited);
            numIslands(i, j - 1, grid, isVisited);
            numIslands(i, j + 1, grid, isVisited);
        }
    };
    
  • 相关阅读:
    HDU 4578
    Luogu 3373
    HDU 6343
    2018牛客网暑期ACM多校训练营(第五场) F
    2018牛客网暑期ACM多校训练营(第五场) E
    2018牛客网暑期ACM多校训练营(第四场) A
    POJ 3580
    HDU 1890
    ZOJ 4029
    2018牛客网暑期ACM多校训练营(第三场) H
  • 原文地址:https://www.cnblogs.com/libaoquan/p/7390798.html
Copyright © 2020-2023  润新知