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