Newer
Older
EMS-WEB-3.0 / src / test / com / casic / accessControl / temp / Father.java
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;
    }
}