leetcode 200:Number of Islands

思路:深度优先搜索,两层循环遍历一遍grid,若该网格为1则进行深度优先搜索并将走过的结点的visit置1,记录连接分量的个数。

class Solution {
public:
    void search(vector<vector<char>>& grid, int i, int j, vector<vector<int>>& visit){
        visit[i][j] = 1;
        int d[][2] = {{-1,0}, {1,0}, {0,-1}, {0,1}};
        for(auto& a:d){
            int nx = a[0]+i, ny = a[1]+j;
            if(nx>=0 && nx<grid.size() && ny>=0 && ny<grid[0].size() && visit[nx][ny]==0 && grid[nx][ny]=='1')
                search(grid, nx, ny, visit);
        }
        
    }
    
    int numIslands(vector<vector<char>>& grid) {
        if(grid.empty() || grid[0].empty())
            return 0;
        vector<vector<int>> visit(grid.size(), vector<int>(grid[0].size(), 0));
        int res = 0;
        for(int i=0; i<grid.size(); ++i){
            for(int j=0; j<grid[0].size(); ++j){
                if(grid[i][j] == '1' && visit[i][j]==0){
                    search(grid, i, j, visit);
                    res++;
                }        
            }
        }
        return res;
    }

};

猜你喜欢

转载自www.cnblogs.com/Bella2017/p/11127473.html