1.题目描述
给你一个由 ‘1’(陆地)和 ‘0’(水)组成的的二维网格,请你计算网格中岛屿的数量。
岛屿总是被水包围,并且每座岛屿只能由水平方向和/或竖直方向上相邻的陆地连接形成。
此外,你可以假设该网格的四条边均被水包围。
示例 1:
输入:
11110
11010
11000
00000
输出: 1
示例 2:
输入:
11000
11000
00100
00011
输出: 3
解释: 每座岛屿只能由水平和/或竖直方向上相邻的陆地连接而成。。*/
2.解题方法
1.深度优先遍历
public class day_1 {
public static void main(String[] args) {
System.out.println("输入行数和列数");
Scanner scanner = new Scanner(System.in);
int row = scanner.nextInt();
int col = scanner.nextInt();
int[][] a = new int[row][col];
for(int i = 0;i<row;i++){
for(int j=0;j<col;j++){
a[i][j] = scanner.nextInt();
}
}
int num = isLand(a);
System.out.println(num);
}
public static int isLand(int[][] a){
int nums=0;
for(int i=0;i<a.length;i++){
for(int j = 0;j<a[0].length;j++){
if(a[i][j]==1){
nums++;
DFS(a,i,j);
}
}
}
return nums;
}
//深度优先遍历
public static void DFS(int[][] a,int r,int c){
int rows = a.length;
int cols = a[0].length;
if(r<0||c<0||r>=rows||c>=cols||a[r][c]==0){
return;
}
a[r][c]=0;
DFS(a,r-1,c);
DFS(a,r+1,c);
DFS(a,r,c-1);
DFS(a,r,c+1);
}
}