您的位置:首页 > 其它

岛屿的个数

2016-05-31 18:05 281 查看
给一个01矩阵,求不同的岛屿的个数。0代表海,1代表岛,如果两个1相邻,那么这两个1属于同一个岛。我们只考虑上下左右为相邻。

样例

在矩阵:
[
[1, 1, 0, 0, 0],
[0, 1, 0, 0, 1],
[0, 0, 0, 1, 1],
[0, 0, 0, 0, 0],
[0, 0, 0, 0, 1]
]

中有 
3
 个岛.【借鉴网上代码整理得】

public class Solution {

    /**

     * @param grid a boolean 2D matrix

     * @return an integer

     */

    public int numIslands(boolean[][] grid) {

        // Write your code here

        //不要忘记判断数组是否为空

        int row = grid.length;

        //因为直接给数组赋值{},并不是null所以不能用grid==null来判断是否为空

         if (row == 0 ){

            return 0;

        }

        //当为空数组时 col赋值会报错 数组越界

        int col = grid[0].length;

        int count = 0;

        /*或者设置一个数组 标记该位置是否判断过 节省时间

        boolean[][] visited = new boolean[row][col];

        for (int i = 0; i < row; i++){

            for (int j = 0; j < col; j++){

                visited[i][j] = false;

            }

        }*/

        //采用递归 深度搜索 搜索之后的位置重置为0

        

        for (int i = 0; i < row; i++){

            for (int j = 0; j < col; j++){

                if (grid[i][j]){

                    count += 1;

                    dfs(grid, i, j);

                }

            }

        }

        return count;

    }

    public void dfs(boolean[][] grid, int x, int y){

        if (x < 0 || y < 0 || x >= grid.length || y >= grid[0].length || !grid[x][y]){

            return ;

        }

       // if (visited[x][y]){

        //    return ;

       // }

       grid[x][y] = false;//访问过得位置置为0 节省时间 

       dfs(grid, x - 1, y);

       dfs(grid, x + 1, y);

       dfs(grid, x, y - 1);

       dfs(grid, x, y + 1);

    }

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: