package com.casic.accessControl.temp; /** * Created by lenovo on 2016/9/23. */ public class Father { //测试回调函数 public void delay(ISon son){ System.out.println("this is the father printing"); son.delay(); System.out.println("son has printed"); } // public static void main(String [] args){ // // Father father = new Father(); // Son son = new Son(); // father.delay(son); // } //每个单元,前后左右均访问,如果访问遇到0,则表示空地,遇到1则变为2, /** * * @param number * @param row * @param column * @return */ public static int visited(int[][]number, int row,int column){ int count =0; if(row<number.length&&column<number[0].length&&number[row][column]==1){ //四个方向分别访问 //向上 number[row][column]=2;//修改自身,表示已经访问过 int upCount = visited(number,row-1,column); //向下 int downCount = visited(number,row+1,column); //向左 int leftCount = visited(number,row,column-1); //向右 int rightCount = visited(number,row,column+1); count = 1+upCount+downCount+leftCount+rightCount; } return count; } // public static void main(String [] args){ // int max = 0; // int a[][] ={{0,0,0,0},{0,1,1,0},{0,0,1,0}, {0,0,0,0}}; // for(int i = 0;i<a.length;i++){ // for(int j=0;j<a[0].length;j++){ // int result = visited(a,i,j); // max = result > max ? result:max; // } // } // System.out.println("最大面积为:"+ max); // // } public static void main(String[] args) { int[][] grid = new int[][] { {0,0,0,0}, {0,1,0,0}, {0,0,1,0}, {0,0,0,0}, }; System.out.println(bigHouse(grid)); } private static int[] par = new int[11111]; private static int[] ran = new int[11111]; private static int ans=1,k,cnt=0; private static void union(int i, int j) { i=find(i); j=find(j); if(i==j) return; if(i>j) { par[i]=j; //ran[j]+=ran[i]; ran[j]++; if(ans<ran[j]) { ans=ran[j]; k=j; } } else { par[j]=i; //ran[i]+=ran[j]; ran[i]++; if(ans<ran[i]) { ans=ran[i]; k=i; } } } private static int find(int i) { int r=i; while(r!=par[r]) r=par[r]; return r; } public static int bigHouse(int[][] grid) { int n=grid.length; int m=grid[0].length; for(int i=0;i<n*m;i++) { par[i]=i;ran[i]=1; } int flag=0; for(int i=0;i<n;i++) { for(int j=0;j<m;j++) { if(grid[i][j]==1) { //union right flag=1; if(j<m-1 && grid[i][j+1]==1) union(i*m+j,i*m+j+1); //union left if(j>0 && grid[i][j-1]==1) union(i*m+j,i*m+j-1); //union up if(i>0 && grid[i-1][j]==1) union(i*m+j, (i-1)*m+j); //union down if(i<n-1 && grid[i+1][j]==1) union(i*m+j, (i+1)*m+j); } } } if(flag==0) return 0; return ans; } }