1. 程式人生 > 實用技巧 >島嶼數量

島嶼數量

給你一個由'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; } }