島嶼數量
阿新 • • 發佈:2020-08-07
給你一個由'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; } }