package echelon;
public class echelon {
public int number;
public int[] number_dir=new int[2001];
public int[][] dir=new int[2001][21];
public double[] point=new double[2001];
int[] peak=new int[2500];
int number_peak;
public int[][] group=new int[2001][2001];
public int[] number_group=new int[2001];
public int[] life=new int[2001];
public int number_g;
public void makedata(){
int s,tx,sx,h,s1;
tx=0;
for(s=1;s<number+1;s++){
h=0;
for(sx=1;sx<number_dir[s]+1;sx++){
s1=dir[s][sx];
if(point[s1]>point[s])h=100;
}
if(h<50)tx=tx+1;
if(h<50)peak[tx]=s;
}
number_peak=tx;
for(s=1;s<number_peak+1;s++){
group[s][1]=peak[s];
life[s]=100;
number_group[s]=1;
}
int g1,sig;
for(g1=1;g1<number_peak+1;g1++){
int mode=0;
while(mode<50){
mount sub=new mount();
sub.dir=dir;
sub.number_group=number_group;
sub.group=group;
sub.number_dir=number_dir;
sub.number=number;
sub.point=point;
sub.makedata(g1);
sig=sub.sig;
number_group=sub.number_group;
group=sub.group;
if(sig<50)mode=100;
}
}
number_g=number_peak;
int modex=0;
while(modex<50){
int sxs=search();
if(sxs>0){
join sub2=new join();
sub2.dir=dir;
sub2.number_group=number_group;
sub2.group=group;
sub2.number_dir=number_dir;
sub2.life=life;
sub2.number_g=number_g;
sub2.number=number;
sub2.makedata(sxs);
life=sub2.life;
number_group=sub2.number_group;
group=sub2.group;
number_g=sub2.number_g;
}
if(sxs==0)modex=100;
}
}
int search(){
int s,sx,s1;
int[] a=new int[2001];
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=0;
int sxs=0;
for(s=1;s<number+1;s++){
double p1=point[s];
if(a[s]>50)p1=-999;
if(p1>maxp)sxs=s;
if(p1>maxp)maxp=p1;
}
return sxs;
}
}
package echelon;
public class join {
int[] number_dir=new int[5000];
int number;
int[] number_group=new int[2001];
int[][] dir=new int[2001][21];
int[][] group=new int[2001][2001];
int number_g;
int[] life=new int[2001];
void makedata(int sp){
int s,sx,s1;
int[] a=new int[2001];
int[] b=new int[2001];
for(s=1;s<number_dir[sp]+1;s++){
s1=dir[sp][s];
for(int gx=1;gx<number_g+1;gx++){
int ch=check_group(gx,s1);
if(ch>60)a[gx]=100;
}
}
sx=0;
for(s=1;s<number_g+1;s++){
if(a[s]>50)sx=sx+1;
if(a[s]>50)b[sx]=s;
}
int number_b=sx;
if(number_b==1){
int g1=b[1];
number_group[g1]=number_group[g1]+1;
sx=number_group[g1];
group[g1][sx]=sp;
}
if(number_b>1){
int g2=number_g+1;
int tx=0;
for(s=1;s<number_b+1;s++){
int g1=b[s];
for(sx=1;sx<number_group[g1]+1;sx++){
tx=tx+1;
group[g2][tx]=group[g1][sx];
}
life[g1]=0;
}
tx=tx+1;
group[g2][tx]=sp;
life[g2]=100;
number_g=g2;
number_group[g2]=tx;
}
}
int check_group(int g1,int s1){
int s;
int ch=0;
for(s=1;s<number_group[g1]+1;s++){
if(group[g1][s]==s1)ch=100;
}
if(life[g1]<60)ch=0;
return ch;
}
}
package echelon;
public class mount {
int[][] group=new int[2001][2001];
int[] number_group=new int[2001];
int[] number_dir=new int[2001];
int[][] dir=new int[2001][21];
int number;
double[] point=new double[2001];
int sig;
void makedata(int g1){
int s,sx,s1,s2,number_b;
int[] a=new int[2001];
int[] b=new int[2001];
for(s=1;s<number_group[g1]+1;s++){
s1=group[g1][s];
for(sx=1;sx<number_dir[s1]+1;sx++){
s2=dir[s1][sx];
a[s2]=100;
}
}
for(s=1;s<number_group[g1]+1;s++){
s1=group[g1][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;
sig=0;
for(s=1;s<number_b+1;s++){
s1=b[s];
int delta=0;
for(sx=1;sx<number_dir[s1]+1;sx++){
s2=dir[s1][sx];
double p1=point[s2];
if(check_group(g1,s2)>50)p1=-999;
if(p1>point[s1])delta=100;
}
int h=0;
if(delta<50)h=h+1;
if(sig<50)h=h+1;
if(h==2)plus(g1,s1);
if(h==2)sig=100;
}
}
void plus(int g1,int s1){
number_group[g1]= number_group[g1]+1;
int s3=number_group[g1];
group[g1][s3]=s1;
}
int check_group(int g1,int ss){
int s;
int ch=0;
for(s=1;s<number_group[g1]+1;s++){
if(group[g1][s]==ss)ch=100;
}
return ch;
}
}
最終更新:2016年05月30日 17:35