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