岛屿数量

给你一个由 '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;
    }
}

 

posted on 2020-08-07 09:05  九七97  阅读(268)  评论(0编辑  收藏  举报

导航