2016.9.14百度笔试题

来源:互联网 发布:特马技巧算法 编辑:程序博客网 时间:2024/05/21 17:50

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


1 0
原创粉丝点击