995p

package peak;
 
public class pro {
 
double[] point=new double[101];
int number,s;
int[] number_dir=new int[101];
int[][] dir=new int[101][11];
int number_peak;
int[] peak=new int[101];
int[][] group=new int[101][101];
int[] number_group=new int[101];
int number_g;
int[] life=new int[101];
 
    public static void main(String[] args) {
        pro te=new pro();
    }
 
    pro(){
 
 
        number=47;
 
          number_dir[1]=1;
number_dir[2]=3;
number_dir[3]=3;
number_dir[4]=3;
number_dir[5]=3;
number_dir[6]=4;
number_dir[7]=6;
number_dir[8]=4;
number_dir[9]=3;
number_dir[10]=5;
number_dir[11]=4;
number_dir[12]=4;
number_dir[13]=5;
number_dir[14]=4;
number_dir[15]=4;
number_dir[16]=4;
number_dir[17]=2;
number_dir[18]=4;
number_dir[19]=4;
number_dir[20]=6;
number_dir[21]=5;
number_dir[22]=5;
number_dir[23]=4;
number_dir[24]=5;
number_dir[25]=4;
number_dir[26]=5;
number_dir[27]=4;
number_dir[28]=6;
number_dir[29]=4;
number_dir[30]=3;
number_dir[31]=3;
number_dir[32]=3;
number_dir[33]=4;
number_dir[34]=4;
number_dir[35]=5;
number_dir[36]=3;
number_dir[37]=3;
number_dir[38]=4;
number_dir[39]=2;
number_dir[40]=4;
number_dir[41]=2;
number_dir[42]=2;
number_dir[43]=5;
number_dir[44]=5;
number_dir[45]=3;
number_dir[46]=3;
number_dir[47]=1;
dir[1][1]=2;
dir[2][1]=1;
dir[2][2]=3;
dir[2][3]=5;
dir[3][1]=2;
dir[3][2]=4;
dir[3][3]=5;
dir[4][1]=3;
dir[4][2]=6;
dir[4][3]=7;
dir[5][1]=2;
dir[5][2]=3;
dir[5][3]=6;
dir[6][1]=4;
dir[6][2]=5;
dir[6][3]=7;
dir[6][4]=15;
dir[7][1]=4;
dir[7][2]=6;
dir[7][3]=8;
dir[7][4]=9;
dir[7][5]=10;
dir[7][6]=15;
dir[8][1]=7;
dir[8][2]=9;
dir[8][3]=11;
dir[8][4]=12;
dir[9][1]=7;
dir[9][2]=8;
dir[9][3]=10;
dir[10][1]=7;
dir[10][2]=9;
dir[10][3]=11;
dir[10][4]=15;
dir[10][5]=20;
dir[11][1]=8;
dir[11][2]=10;
dir[11][3]=12;
dir[11][4]=13;
dir[12][1]=8;
dir[12][2]=11;
dir[12][3]=13;
dir[12][4]=14;
dir[13][1]=11;
dir[13][2]=12;
dir[13][3]=14;
dir[13][4]=19;
dir[13][5]=22;
dir[14][1]=12;
dir[14][2]=13;
dir[14][3]=19;
dir[14][4]=22;
dir[15][1]=6;
dir[15][2]=7;
dir[15][3]=10;
dir[15][4]=20;
dir[16][1]=15;
dir[16][2]=17;
dir[16][3]=20;
dir[16][4]=21;
dir[17][1]=16;
dir[17][2]=18;
dir[18][1]=17;
dir[18][2]=21;
dir[18][3]=25;
dir[18][4]=26;
dir[19][1]=13;
dir[19][2]=14;
dir[19][3]=20;
dir[19][4]=22;
dir[20][1]=10;
dir[20][2]=15;
dir[20][3]=16;
dir[20][4]=19;
dir[20][5]=21;
dir[20][6]=23;
dir[21][1]=16;
dir[21][2]=20;
dir[21][3]=23;
dir[21][4]=24;
dir[21][5]=25;
dir[22][1]=13;
dir[22][2]=14;
dir[22][3]=19;
dir[22][4]=20;
dir[22][5]=23;
dir[23][1]=20;
dir[23][2]=21;
dir[23][3]=22;
dir[23][4]=24;
dir[24][1]=21;
dir[24][2]=23;
dir[24][3]=25;
dir[24][4]=29;
dir[24][5]=30;
dir[25][1]=18;
dir[25][2]=21;
dir[25][3]=24;
dir[25][4]=26;
dir[26][1]=18;
dir[26][2]=25;
dir[26][3]=27;
dir[26][4]=28;
dir[26][5]=29;
dir[27][1]=26;
dir[27][2]=28;
dir[27][3]=29;
dir[27][4]=30;
dir[28][1]=26;
dir[28][2]=27;
dir[28][3]=31;
dir[28][4]=33;
dir[28][5]=36;
dir[28][6]=37;
dir[29][1]=24;
dir[29][2]=26;
dir[29][3]=27;
dir[29][4]=30;
dir[30][1]=24;
dir[30][2]=27;
dir[30][3]=29;
dir[31][1]=28;
dir[31][2]=32;
dir[31][3]=33;
dir[32][1]=31;
dir[32][2]=34;
dir[32][3]=35;
dir[33][1]=28;
dir[33][2]=31;
dir[33][3]=34;
dir[33][4]=37;
dir[34][1]=32;
dir[34][2]=33;
dir[34][3]=35;
dir[34][4]=38;
dir[35][1]=32;
dir[35][2]=34;
dir[35][3]=38;
dir[35][4]=40;
dir[35][5]=44;
dir[36][1]=28;
dir[36][2]=37;
dir[36][3]=39;
dir[37][1]=33;
dir[37][2]=36;
dir[37][3]=38;
dir[38][1]=34;
dir[38][2]=35;
dir[38][3]=37;
dir[38][4]=39;
dir[39][1]=36;
dir[39][2]=38;
dir[40][1]=35;
dir[40][2]=41;
dir[40][3]=43;
dir[40][4]=44;
dir[41][1]=40;
dir[41][2]=42;
dir[42][1]=41;
dir[42][2]=43;
dir[43][1]=40;
dir[43][2]=42;
dir[43][3]=44;
dir[43][4]=45;
dir[43][5]=46;
dir[44][1]=35;
dir[44][2]=38;
dir[44][3]=40;
dir[44][4]=43;
dir[44][5]=45;
dir[45][1]=43;
dir[45][2]=44;
dir[45][3]=46;
dir[46][1]=43;
dir[46][2]=45;
dir[46][3]=47;
dir[47][1]=46;
 
 
 
        for(s=1;s<number+1;s++){
        point[s]=100*Math.random();
        }
 
 
 
 
 
 
 
number_peak=0;
int sx;
 
for(s=1;s<number+1;s++){
double p1=point[s];
int h=0;
for(sx=1;sx<number_dir[s]+1;sx++){
int s1=dir[s][sx];
if(point[s1]>p1)h=100;    
}
if(h<50)number_peak=number_peak+1;
if(h<50)peak[number_peak]=s;    
}
 
number_g=number_peak;
for(s=1;s<number_g+1;s++){
group[s][1]=peak[s];    
number_group[s]=1;
life[s]=100;
}
 
 
int plus;
for(s=1;s<number_g+1;s++){ 
int mode=0;
while(mode<50){
 
mount sub=new mount();
sub.number=number;
sub.dir=dir;
sub.number_dir=number_dir;
sub.number_group=number_group;
sub.group=group;
sub.point=point;
sub.makedata(s);
plus=sub.plus;        
number_group=sub.number_group;
group=sub.group;   
 
if(plus==0)mode=100;
 
 
    }
 
}
int tr;
for(tr=1;tr<100;tr++){ 
sx=search();
 
if(sx>0){
 
join sub2=new join();
sub2.number=number;
sub2.number_g=number_g;
sub2.dir=dir;
sub2.number_dir=number_dir;
sub2.number_group=number_group;
sub2.group=group;
sub2.life=life;
sub2.makedata(sx);
number_group=sub2.number_group;
group=sub2.group;
life=sub2.life; 
number_g=sub2.number_g;
 
 
}
 
}
 
for(s=1;s<number_g+1;s++){
System.out.println(s+","+number_group[s]);
    }
 
 
 
   }
 
 
 
int search(){
    int s,sx,s1;
    int[] a=new int[100];
 
    for(s=1;s<number_g+1;s++){ 
    for(sx=1;sx<number_group[s]+1;sx++){ 
    s1=group[s][sx];
    a[s1]=100;
    }
    }
    double maxp=-888;
    sx=0;
    for(s=1;s<number+1;s++){
    double p1=point[s];    
    if(a[s]>60)p1=-999;
    if(p1>maxp)sx=s;
    if(p1>maxp)maxp=p1;
    }
 
 
    return sx;
}    
 
 
 
 
 
}
 
 
 
package peak;
 
 
public class mount {
 
    int number;
double[] point=new double[101];
    int[][] group=new int[101][11];
    int[] number_group=new int[50];
int[] number_dir=new int[101];
int[][] dir=new int[101][11];
int plus;
 
void makedata(int n){
    int s,sx,s1,s2;
    int[] a=new int[100];
       int[] b=new int[100];
       int number_b;
 
 
    for(s=1;s<number_group[n]+1;s++){
    s1=group[n][s];    
    for(sx=1;sx<number_dir[s1]+1;sx++){
    s2=dir[s1][sx];    
    a[s2]=100;
    }
    }
 
    for(s=1;s<number_group[n]+1;s++){
    s1=group[n][s];  
    a[s1]=0;
    }
 
    sx=0;
    for(s=1;s<number+1;s++){
 
    if(a[s]>50)sx=sx+1;
    if(a[s]>50)b[sx]=s;
    }
    number_b=sx;
 
 
   int mode=0;
   int tx;
   plus=0;
   s=1;
   while(mode<50){
   sx=b[s];    
   double p1=point[sx];
   int delta=0;
   for(tx=1;tx<number_dir[sx]+1;tx++){
   s2=dir[sx][tx];
   double p2=point[s2];
   if(check(n,s2)>50)p2=-999;
   if(p2>p1)delta=100;
   }
   if(delta<60)plus=sx;
   if(delta<60)mode=100;
   s=s+1;
   if(s>number_b)mode=100;
   }
 
 
   if(plus>0)number_group[n]=number_group[n]+1;
   int kk=number_group[n];
   if(plus>0)group[n][kk]=plus;
 
 
 
}
 
int check(int n1,int m1){
 
    int s,sx;
    int ch=0;
 for(s=1;s<number_group[n1]+1;s++){
 sx=group[n1][s];
 if(sx==m1)ch=100;
 }   
 
 
 return ch;   
}
 
 
 
}
 
 
 
 
package peak;
 
 
public class join {
 
    int[] number_dir=new int[101];
int[][] dir=new int[101][11];
int number_peak;
int[] peak=new int[101];
int[][] group=new int[101][101];
int[] number_group=new int[101];
int[] life=new int[101];
int number_g;
int number;
 
void makedata(int n){
    int s,sx;
    int[] a=new int[101];
    int[] b=new int[101];
    int[] g=new int[101];
    int[] g2=new int[101];
    int tx=0;
    for(s=1;s<number_dir[n]+1;s++){
    int s1=dir[n][s];    
    sx=check(s1);
    if(sx>0)g[sx]=100;
    }
 
    sx=0;
    for(s=1;s<number+1;s++){
    if(g[s]>50)sx=sx+1;    
    if(g[s]>50)g2[sx]=s;   
    }
 
    int number_sub=sx;
 
 
 
    if(number_sub>1){
 
         tx=0;
    for(s=1;s<number_sub+1;s++){
    int s1=g2[s];
for(sx=1;sx<number_group[s1]+1;sx++){
    tx=tx+1;
    group[number_g+1][tx]=group[s1][sx];
    }
    }
 
    tx=tx+1;
    group[number_g+1][tx]=n;
 
    number_group[number_g+1]=tx;
    life[number_g+1]=100;
 number_g=number_g+1;
 
    for(s=1;s<number_sub+1;s++){
    int s1=g2[s];
    life[s1]=0;
    }
 
 
 
    }
 
 
      if(number_sub==1){
 
          int s1=g2[1];
   int m1=number_group[s1];
    group[s1][m1+1]=n;
    number_group[s1]=m1+1;
 
 
    }
 
 
 
 
 
 
 
 
}
int check(int p){
    int s,sx,sxs;
    sxs=0;
    for(s=1;s<number_g+1;s++){
    for(sx=1;sx<number_group[s]+1;sx++){
    int s1=group[s][sx];
    if(life[s]<50)s1=0;
    if(s1==p)sxs=s;
    }
    }
 
return sxs;
 
 
}
}
 
最終更新:2016年05月28日 17:40