中兴2016蓝剑之路挑战赛软件编程初赛赛题 计算房屋个数

来源:互联网 发布:无印良品淘宝旗舰店天猫 编辑:程序博客网 时间:2024/06/02 23:05

题目描述:给定一个n*m的二维数组grid[n][m],数组的值为0或1,1的地方代表一个房屋数量,左右或上下相邻认为是一个房屋数量,求共有多少个屋子?


分       析首先遍历数组,计算数组中所有为1的个数,但如果这个1的(右边为1且下边为0)或(右边为0且下边为1)或(右方下方右下方均为1)时给房屋数量减1,若右方下方为1且右下方为0时减2,遍历完数组即可得出房屋数量

代      码

[java] view plain copy
  1. public class Test {  
  2.     static int result = 0;  
  3.     public static int pa(int grid[][]){  
  4.         int m = grid.length;  
  5.         int n = grid[0].length;  
  6.         int x = m - 1;  
  7.         int y = n - 1;  
  8.         if (grid != null) {  
  9.             for (int i = 0; i < m;i++) {  
  10.                 for (int j = 0; j < n;j++) {  
  11.                     if(grid[i][j] == 1){  
  12.                         ++result;  
  13.                         if (i == x && j < y) {  
  14.                             if (grid[i][j+1] == 1) {  
  15.                                 result -= 1;  
  16.                             }  
  17.                         }  
  18.                         if (i < x && j == y) {  
  19.                             if (grid[i+1][j] == 1) {  
  20.                                 result -= 1;  
  21.                             }  
  22.                         }  
  23.                         if (i < x && j < y) {  
  24.                             if (grid[i][j+1] == 1 && grid[i+1][j] == 0) {  
  25.                                 result = result - 1;  
  26.                             }  
  27.                             if (grid[i][j+1] == 0 && grid[i+1][j] == 1) {  
  28.                                 result = result - 1;  
  29.                             }  
  30.                             if (grid[i][j+1] == 1 && grid[i+1][j] == 1 && grid[i+1][j+1] == 1) {  
  31.                                 result = result - 1;  
  32.                             }  
  33.                             if (grid[i][j+1] == 1 && grid[i+1][j] == 1 && grid[i+1][j+1] == 0) {  
  34.                                 result = result - 2;  
  35.                             }  
  36.                         }  
  37.                     }  
  38.                 }  
  39.             }  
  40.         }  
  41.         return result;  
  42.     }  
  43.     public static void main(String[] args) {//      测试用例  
  44. //      int[][]  a1 ={{1,1,0,0},{1,1,0,0},{0,0,1,1},{0,0,1,1}}; //2      
  45. //      System.out.println(pa(a1));  
  46. //      int[][]  a2 ={{0,0,0,0},{0,1,0,0},{0,0,1,0},{0,0,0,0}}; //2  
  47. //      System.out.println(pa(a2));  
  48. //      int[][]  a3 ={{1,1,0,0},{0,0,1,0},{0,1,0,0},{0,0,1,1}}; //4  
  49. //      System.out.println(pa(a3));  
  50. //      int[][]  a4 ={{1,1,0,0,1,1},{0,1,0,0,1,0},{1,0,1,1,0,1},{0,1,0,0,0,1}}; //6  
  51. //      System.out.println(pa(a4));  
  52. //      int[][]  a5 ={{1,1,0,0,0,0},{0,1,1,0,0,0},{0,0,1,1,0,0},{0,0,0,1,1,0},{0,0,0,0,1,1}}; //1  
  53. //      System.out.println(pa(a5));  
  54.         int[][]  a6 ={{1,1,0,1,0,1,1},{1,1,0,1,0,0,0},{1,1,1,0,0,1,0},{0,0,0,1,0,1,1},{1,1,0,0,0,1,0}}; //6  
  55.         int s = pa(a6);  
  56. }  
0 0