给一个01矩阵,1代表是陆地,0代表海洋, 如果两个1相邻,那么这两个1属于同一个岛。我们只考虑上下左右为相邻。
岛屿: 相邻陆地可以组成一个岛屿(相邻:上下左右) 判断岛屿个数。
第一行输入两个数字n,m(1<=n<=200,1<=m<=200)后面n行01序列,每一行m个字符,表示陆地和海洋
输出一个数字表示岛屿的个数
5 5 11000 01011 00011 00000 00111
3
import java.util.*;
public class Main{
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
String[] lines = sc.nextLine().split(" ");
int m = Integer.parseInt(lines[0]);
int n = Integer.parseInt(lines[1]);
if(n < 1 || n > 200 || m < 1 || m > 200){
//System.out.println(0);
return;
}
int[][] arr = new int[m][n];
int r = 0;
while(sc.hasNext()){
String line = sc.nextLine();
for(int j = 0;j < n;j++){
arr[r][j] = line.charAt(j) - '0';
}
r++;
if(r >= m){
break;
}
}
if(m == 0 || n == 0){
System.out.println(0);
return;
}
int cnt = 0;
for(int i = 0;i < m;i++){
for(int j = 0;j < n;j++){
if(arr[i][j] == 1){
cnt++;
dfs(arr,i,j);
}
}
}
System.out.println(cnt);
}
private static void dfs(int[][] arr,int r,int c){
int m = arr.length;
int n = arr[0].length;
if(r < 0 || c < 0 || r >= m || c >= n || arr[r][c] == 0){
return;
}
arr[r][c] = 0;
dfs(arr,r + 1,c);
dfs(arr,r - 1,c);
dfs(arr,r,c + 1);
dfs(arr,r,c - 1);
}
} 本地调试是没问题的,leetcode也过了,牛客只有93.75说数组越界,感觉问题出在输入上了但不知道为什么和怎么改,求大神解答