每天一道LeetCode-----给定二维数组代表海域和岛屿,计算有多少个孤岛

Number of Islands

原题链接Number of Islands

给定一个二位数组,其中’0’代表水,’1’代表土地,判断有多少个孤岛被水隔开。假定二位数组四周都是’0’

思路:

遇到一个’1’就代表肯定有孤岛,然后从这个位置开始将所有相邻的’1’都变为’0’

代码如下

class Solution {
public:
    int numIslands(vector<vector<char>>& grid) {
        int n = 0;
        for(int i = 0; i < grid.size(); ++i)
        {
            for(int j = 0; j < grid[i].size(); ++j)
            {
                if(grid[i][j] == '1')
                {
                    ++n;
                    convert_to_zero(grid, i, j);
                }
            }
        }
        return n;
    }
private:
    void convert_to_zero(vector<vector<char>>& grid, int i, int j)
    {
        if(grid[i][j] == '0')
            return;
        grid[i][j] = '0';
        for(auto& dir : dirs)
        {
            int row = i + dir[0];
            int col = j + dir[1];
            if(row < 0 || row >= grid.size() || col < 0 || col >= grid[row].size())
                continue;
            convert_to_zero(grid, row, col);
        }
    }

    static vector<vector<char>> dirs;
};

vector<vector<char>> Solution::dirs = { {0, 1}, {1, 0}, {0, -1}, {-1, 0} };

猜你喜欢

转载自blog.csdn.net/sinat_35261315/article/details/79424416