岛屿的数量

题目

给一个01矩阵,1代表是陆地,0代表海洋, 如果两个1相邻,那么这两个1属于同一个岛。我们只考虑上下左右为相邻。
岛屿: 相邻陆地可以组成一个岛屿(相邻:上下左右) 判断岛屿个数。

示例1
输入:
[[1,1,0,0,0],[0,1,0,1,1],[0,0,0,1,1],[0,0,0,0,0],[0,0,1,1,1]]
返回值:
3

利用深度优先遍历把所有的相连的1标记被访问过,遍历二维数组每次遇到1且是没有访问过的,那么次数加一并进行深度优先遍历。

public int count = 0;
    public int solve (char[][] grid) {
        // write code here
        int rowLen = grid.length;
        int colLen = grid[0].length;
        boolean[][] visited = new boolean[rowLen][colLen];
        for(int i = 0; i < rowLen; i++) {
            for(int j = 0; j < colLen; j++) {
            //如果元素为1且未被访问过,表示这是一个新的岛屿,因为从1开始访问其相连的1都会被访问
                if(grid[i][j] == '1' && visited[i][j] == false) {
                    count++;
                    dfs(grid,i,j,visited);
                }
            }
        }
        return count;
        
    }
    public void dfs(char[][] grid,int row,int col,boolean[][] visited) {
        int rowLen = grid.length;
        int colLen = grid[0].length;
        //超过下边界
       if(row >= rowLen) {
           return;
       }
        //超过右边界
        if(col >= colLen) {
            return;
        }
        //超过上边界
        if(row  < 0) {
            return;
        }
        //超过左边界
        if(col < 0) {
            return;
        }
        //如果当前节点被访问过
        if(visited[row][col] == true) {
            return;
        }
        if(grid[row][col] == '0') {
            return;
        }
        //访问当前节点
        visited[row][col] = true;
        //向左访问
        dfs(grid,row,col-1,visited);
        //向*问
         dfs(grid,row-1,col,visited);
        //向右访问
         dfs(grid,row,col+1,visited);
        //向下访问
         dfs(grid,row + 1,col,visited);
        
    }
上一篇:leetcode-64. 最小路径和


下一篇:菊厂笔试3