题目:
一个矩阵中只有0和1两种值,每个位置都可以和自己的上、下、左、右四个位置相连,
如果有一片1连在一起,这个部分叫做一个岛,求一个矩阵中有多少个岛?
举例:
0 0 1 0 1 0
1 1 1 0 1 0
1 0 0 1 0 0
0 0 0 0 0 0
这个矩阵中有三个岛。
分析:
1、将数据存到二维数组中,遍历数组,当前值为1时,岛计数加一,将当前值写为2,并将当前于之相连的1值写为2。
code:
public static int method(int[][] arr) {
int num = 0;
for (int i = 0; i < 4; i++) {
for (int j = 0; j < 6; j++) {
if (arr[i][j] == 1) {
num++;
method2(arr, i, j);
}
}
}
return num;
}
public static void method2(int[][] arr, int i, int j) {
if (i < 0 || j < 0 || i > 3 || j > 5 || arr[i][j] == 0 || arr[i][j] == 2) {
return;
}
arr[i][j] = 2;
method2(arr, i + 1, j);
method2(arr, i - 1, j);
method2(arr, i, j - 1);
method2(arr, i, j + 1);
}
2、大量数据时,可以考虑用并查集,多线程并发,将整个矩阵分成多块,最后按边界情况进行合并。