svn.filsa.org sketches

Rev

Blame | Last modification | View Log | RSS feed

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;



public class sandbox {


        static boolean[][] syorizumi;
        static char[][] moto;
        static final int xmax=600,ymax=600;


        public static void main(String[] args) throws  IOException {

                long pre=System.currentTimeMillis();
                syorizumi = new boolean[ymax][xmax];
                moto = new char[ymax][xmax];

                        FileReader fr = new FileReader("patchworkinput.txt");
                        BufferedReader br = new BufferedReader(fr);

                        String tmp_str;
                        int cur=0;
                        while((tmp_str = br.readLine()) != null){
                                char tmp_char[] = tmp_str.toCharArray();

                                for(int j=0;j<xmax;j++){
                                        moto[cur][j]=tmp_char[j];
                                        syorizumi[cur][j]=false;
                                }

                                cur++;
                        }
                        br.close();    
               



                int recmax=0;
                int maxes[][]=new int[10][2];
                int maxcur=0;
                for(int y=0;y<ymax;y++){
                        for(int x=0;x<xmax;x++){

                                int tmp=rec(x,y,moto[y][x]);
                                if(tmp>recmax){
                                        recmax=tmp;//System.out.println(recmax);
                                        maxcur=0;
                                        maxes[maxcur][0]=x;
                                        maxes[maxcur][1]=y;
                                }else if(tmp==recmax){
                                        maxcur++;
                                        maxes[maxcur][0]=x;
                                        maxes[maxcur][1]=y;
                                }
                        }
                }
//              for(int j=0;j<=maxcur;j++){
//                      System.out.println(maxes[j][0]+" y:"+maxes[j][1]);
//              }
                for(int y=0;y<ymax;y++){       
                        for(int x=0;x<xmax;x++){
                                syorizumi[y][x]=false;
                        }
                }
                for(int i=0;i<=maxcur;i++)
                        System.out.println(rec2(maxes[i][0],maxes[i][1],moto[maxes[i][1]][maxes[i][0]]));
                int cnt=0;
                for(int y=0;y<ymax;y++){
                        cnt=0;
                        for(int x=0;x<xmax;x++){
                                if(moto[y][x]=='_')
                                        cnt++;

                        }

                        System.out.println(cnt);
                }
                System.out.println((double)(System.currentTimeMillis()-pre)/1000);
        }

        static int rec(int x,int y,char c){

                if(  x>=xmax || y >= ymax || x < 0 || y < 0 || syorizumi[y][x] || moto[y][x] != c)
                        return 0;

                int ret=1;
                syorizumi[y][x] =true;
                ret += rec(x+1,y,c);
                ret += rec(x,y+1,c);
                ret += rec(x-1,y,c);
                ret += rec(x,y-1,c);
                return ret;
        }

        static int rec2(int x,int y,char c){

                if(  x>=xmax || y >= ymax || x < 0 || y < 0 || syorizumi[y][x] || moto[y][x] != c)
                        return 0;
       
                int ret=1;
                syorizumi[y][x] =true;
                moto[y][x]='_';
                ret += rec2(x+1,y,c);
                ret += rec2(x,y+1,c);
                ret += rec2(x-1,y,c);
                ret += rec2(x,y-1,c);
                return ret;
        }

}