[leetcode]Number of Islands

class Solution {
public:
    void help(vector<vector<char>> &g,int x,int y){//dfs
        if((x<0)||(x>=g.size())||(y<0)||(y>=g[x].size())||(g[x][y]!='1')){//边界条件
            return;
        }
        g[x][y]=0;//原地标记
        help(g,x-1,y);//上移
        help(g,x+1,y);//下移
        help(g,x,y-1);//左移
        help(g,x,y+1);//右移
    }
    int numIslands(vector<vector<char>>& grid) {
        int ans=0;
        for(int i=0;i<grid.size();++i){//row
            for(int j=0;j<grid[i].size();++j){//column
                if(grid[i][j]=='1'){
                    help(grid,i,j);
                    ++ans;
                }
            }
        }
        return ans;
    }
};
class Solution {
public:
    void help(vector<vector<char>> &g,int x,int y){//bfs
        queue<pair<int,int> > q;
        const int dx[]={-1,1,0,0};
        const int dy[]={0,0,-1,1};
        g[x][y]='0';//原地标记为已访问
        for(q.push(make_pair(x,y));!q.empty();q.pop()){
            x=q.front().first;
            y=q.front().second;
            for(int i=0;i<4;++i){
                int nx=x+dx[i];
                int ny=y+dy[i];
                if((nx>=0)&&(nx<g.size())&&(ny>=0)&&(ny<g[nx].size())&&(g[nx][ny]=='1')){
                    g[nx][ny]='0';//标记
                    q.push(make_pair(nx,ny));
                }
            }
        }
    }
    int numIslands(vector<vector<char>>& grid) {
        int ans=0;
        for(int i=0;i<grid.size();++i){//row
            for(int j=0;j<grid[i].size();++j){//column
                if(grid[i][j]=='1'){
                    help(grid,i,j);
                    ++ans;
                }
            }
        }
        return ans;
    }
};

你可能感兴趣的:(LeetCode,DFS)