给一个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说数组越界,感觉问题出在输入上了但不知道为什么和怎么改,求大神解答