zoukankan      html  css  js  c++  java
  • 岛屿数量

    给你一个由 '1'(陆地)和 '0'(水)组成的的二维网格,请你计算网格中岛屿的数量。

    岛屿总是被水包围,并且每座岛屿只能由水平方向或竖直方向上相邻的陆地连接形成。

    此外,你可以假设该网格的四条边均被水包围。

    示例 1:

    输入:
    [
    ['1','1','1','1','0'],
    ['1','1','0','1','0'],
    ['1','1','0','0','0'],
    ['0','0','0','0','0']
    ]
    输出: 1
    示例 2:

    输入:
    [
    ['1','1','0','0','0'],
    ['1','1','0','0','0'],
    ['0','0','1','0','0'],
    ['0','0','0','1','1']
    ]
    输出: 3
    解释: 每座岛屿只能由水平和/或竖直方向上相邻的陆地连接而成。

    来源:力扣(LeetCode)
    链接:https://leetcode-cn.com/problems/number-of-islands

    class Solution {
        int dir[][]={{-1,0},{0,1},{1,0},{0,-1}};
        boolean [][] visted;
        char[][] grid;
        int R;
        int C;
        public int numIslands(char[][] grid) {
           
            R=grid.length;
            if(R==0 ) return 0;
            C=grid[0].length;
            visted=new boolean[R][C];
            this.grid=grid;
            int res=0;
    
            for(int i=0;i<R;i++){
            for(int j=0;j<C;j++){
            if(grid[i][j]=='1' && !visted[i][j]){
             visted[i][j]=true;
               res++;
               bfs(i,j);
            }
            }
            }
            return res;
        }
        private void bfs(int i,int j){
               
                visted[i][j]=true;
             for(int d=0;d<4;d++){
                    int x=i+dir[d][0];
                    int y=j+dir[d][1];
                    if( inarea(x,y)&& grid[x][y]=='1' && !visted[x][y] ){
                        bfs(x,y);
                    }
                }
               
        }
        private boolean inarea(int x,int y){
            return x>=0 && y>=0 && x<R && y<C;
        }
    }
  • 相关阅读:
    我是一条内存[转]
    随机翻唱辑 [2006.8.18更新]
    CentOS NTFS 挂载
    grub备忘
    CentOS 使用163软件源
    被车撞了
    爱上苦瓜
    无聊的游戏
    今天去爬山了
    博客搬家了:www.sanv.org
  • 原文地址:https://www.cnblogs.com/-jiuqi/p/13450641.html
Copyright © 2011-2022 走看看