2016.9.14百度笔试题

    xiaoxiao2022-06-22  16

    题目大意是给出一个二维数组, 描述一块地内房屋的分布, 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; } }

    转载请注明原文地址: https://ju.6miu.com/read-1122798.html

    最新回复(0)