岛屿的个数

原创 2016年05月31日 18:05:23

给一个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);
    }
}

相关文章推荐

岛屿的个数(LintCode)

题目来源:LintCode 原题地址:http://www.lintcode.com/zh-cn/problem/number-of-islands/ 题目: 给一个01矩阵...
  • lyy_hit
  • lyy_hit
  • 2015年10月25日 18:51
  • 456

基于岛屿模型的粒子群优化

  • 2010年11月02日 14:05
  • 162KB
  • 下载

岛屿的形成

  • 2005年12月13日 15:20
  • 1.31MB
  • 下载

LintCode——岛屿的个数

描述: 给一个01矩阵,求不同的岛屿的个数。 0代表海,1代表岛,如果两个1相邻,那么这两个1属于同一个岛。我们只考虑上下左右为相邻。 样例: ...
  • outmain
  • outmain
  • 2016年04月24日 15:18
  • 320

hiho一下[156周]:岛屿

给你一张某一海域卫星照片,你需要统计: 照片中海岛的数目 照片中面积不同的海岛数目 照片中形状不同的海岛数目 其中海域的照片如下,”.”表示海洋,”#”表示陆地。在”上下左右”四个方向上连在一起的一片...

leetcode解题之200. Number of Islands Java版(岛屿的数量)

leetcode解题之200. Number of Islands Java版(岛屿的数量) ,深度优先遍历

NYOJ1237 最大岛屿(深搜DFS)

题目: 括号配对问题 时间限制:3000 ms  |  内存限制:65535 KB 难度:3 描述现在,有一行括号序列,请你检查这行括号是否配对。 输入第一行输入一个数N(0 输出...

bzoj1137【POI2009】Wsp 岛屿

半平面交

Java实现-岛屿的个数

public class Solution { /** * @param grid a boolean 2D matrix * @return an integer ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:岛屿的个数
举报原因:
原因补充:

(最多只允许输入30个字)