LintCode:433. 岛屿的个数

题目:

给一个01矩阵,求不同的岛屿的个数。

0代表海,1代表岛,如果两个1相邻,那么这两个1属于同一个岛。我们只考虑上下左右为相邻。


分析:采用深度优先搜索的方法,对于位置(i,j)的数,若为1,则为岛屿,则对该位置进行深度优先遍历,使得其四周为1的置为0,并递归下去,类似于深度搜索。将该位置四周的为1的变为0的意思就是把它们看成与该位置为同一个岛屿,则再遍历的时候就不会计它们的数(如果原来为1,岛屿数count会加1)。

public class Solution {
    /**
     * @param grid: a boolean 2D matrix
     * @return: an integer
     */
    public int numIslands(boolean[][] grid) {
        // write your code here
        if(grid==null || grid.length==0)    return 0;
        int count=0;
        int row=grid.length;
        int col=grid[0].length;
        for(int i=0;i<row;i++){
            for(int j=0;j<col;j++){
                if(grid[i][j]){
                    count++;
                    dfs(grid,i,j);
                }
            }
        }
        return count;
    }

    public void dfs(boolean[][] grid,int i,int j){
        if(i<0||i>=grid.length||j<0||j>=grid[0].length)
            return;
        if(grid[i][j]) {
            grid[i][j] = false;
            //往左
            dfs(grid, i, j - 1);
            //往右
            dfs(grid, i, j + 1);
            //往上
            dfs(grid, i - 1, j);
            //往下
            dfs(grid, i + 1, j);
        }
    }
}

猜你喜欢

转载自blog.csdn.net/qq_27139155/article/details/80670177