题目大意是给出一个二维数组, 描述一块地内房屋的分布, 1表示有房屋, 0表示没有, 前后上下相邻的1表示同一座房屋, 对角线不算。
思路:从【0】】【0】位开始遍历数组, 遇见第一个1时, 执行minOfHouse函数, 将与这个1前后左右相邻的1递归全部改为0。
代码如下:
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
int arr[][] = {{1, 1, 0, 1, 1},
{0, 1, 1, 0, 1},
{0, 1, 0, 1, 1},
{0, 1, 1, 1, 1}};
int value = 0;
for(int i = 0; i < arr.length; i++) {
for(int j = 0; j < arr[0].length; j++) {
if(arr[i][j] == 1) {
numOfHouse(arr, i, j);
value++;
}
}
}
System.out.println(value);
for(int i = 0; i < arr.length; i++) {
for(int j = 0; j < arr[0].length; j++) {
System.out.print(arr[i][j] + " ");
}
System.out.println();
}
}
public static void numOfHouse(int arr[][], int i, int j) {
while(j-1 >= 0 && arr[i][j-1] == 1) {
j--;
}
while(i < arr.length && j < arr[0].length && arr[i][j] == 1) {
arr[i][j] = 0;
while(i+1 < arr.length && arr[i+1][j] == 1) {
numOfHouse(arr, i+1, j);
}
while(i-1 >= 0 && arr[i-1][j] == 1) {
numOfHouse(arr, i-1, j);
}
j++;
}
//return 0;
}
}