题解 | #岛屿数量#

岛屿数量

https://www.nowcoder.com/practice/0c9664d1554e466aa107d899418e814e

/*
简单的dfs问题,遍历图中的每个点,如果是是非‘0’点,
则以此点为根节点,沿四个方向搜索它的所有子节点,并把它的子节点置为‘0’
保证不会重复搜索
*/
class Solution {
private:
    int n,m;
    void dfs(int x,int y, vector<vector<char>>& grid){
        //左
        if(y-1>=0&&grid[x][y-1]!='0')grid[x][y-1]='0',dfs(x,y-1,grid);
        //右
        if(y+1<m&&grid[x][y+1]!='0')grid[x][y+1]='0',dfs(x,y+1,grid);
        //上
        if(x-1>=0&&grid[x-1][y]!='0')grid[x-1][y]='0',dfs(x-1,y,grid);
        //下
        if(x+1<n&&grid[x+1][y]!='0')grid[x+1][y]='0',dfs(x+1,y,grid);
    }
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 判断岛屿数量
     * @param grid char字符型vector<vector<>> 
     * @return int整型
     */
    int solve(vector<vector<char> >& grid) {
        // write code here
        n=grid.size();
        m=grid[0].size();
        int cnt=0;
        for(int i=0;i<n;++i){
            for(int j=0;j<m;++j){
                if(grid[i][j]!='0'){
                    grid[i][j]='0';
                    ++cnt;
                    dfs(i,j,grid);
                }
            }
        }
        return cnt;
    }
};

全部评论

相关推荐

10-29 18:20
济南大学 Java
用微笑面对困难:他不是人事吗,怎么净特么不干人事
点赞 评论 收藏
分享
10-28 17:30
已编辑
华东交通大学 Java
想进开水团喝开水:字节的hr的本职工作就是黄金矿工
秋招笔试记录
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务