アットウィキロゴ

じょう

package ren;
 
 
public class mountain {
 
    int t,datanumber;
    int s,sx,c,n,cx,nx,cxs,nxs,sxs;
  double e1;
   double[][][][] v=new double[599][3][20][150];
      int[][][][] gotoc=new int[599][3][20][150];
      int[][][][] gotos=new int[599][3][20][150];
      int[][][][] goton=new int[599][3][20][150];
       double[] point=new double[5000];
    double[] nearpoint=new double[5000];
       double minp,maxp,delta;
 
   int[] route_c=new int[600];
   int[] route_s=new int[600];
   int[] route_n=new int[600];
 
 
    void makedata(){
 
 
        int h,z;
       double v1,minv;
 
       minp=999;
        maxp=0;
 
 
        for(s=1;s<datanumber+1;s++){
        if(point[s]>maxp)maxp=point[s];
        if(point[s]<minp)minp=point[s];
        }
 
 
       delta=(maxp-minp)/100;
 
      for(s=1;s<101;s++){
      for(c=1;c<3;c++){
      for(n=0;n<20;n++){
      v[1][c][n][s]=999999;
      }
      }
      }
 
 
 
 
 
      double p1;
 
      for(s=1;s<101;s++){
      for(c=1;c<3;c++){
      p1=minp+delta*s;
      e1=(point[1]-p1)*(point[1]-p1);
      v[1][c][0][s]=e1;
      }
      }
 
      for(t=2;t<datanumber+1;t++){
      for(s=1;s<101;s++){
      for(c=1;c<3;c++){
      for(n=0;n<20;n++){
      p1=minp+delta*s;
      e1=(point[t]-p1)*(point[t]-p1);
      minv=99999;
      cxs=0;
      sxs=0;
      nxs=0;
      for(sx=1;sx<101;sx++){ 
      for(cx=1;cx<3;cx++){ 
      z=0;
      h=0;
      if(c==1)h=h+1;
      if(sx>s)h=h+1;
      if(h==2)z=100;
      h=0;
      if(c==2)h=h+1;
      if(s>sx)h=h+1;
      if(h==2)z=100;
      h=0;
      if(c==cx)h=100;
      if(h>50)nx=n;
      if(h<50)nx=n-1;
      if(nx<0)z=100;
      if(nx<0)nx=0;
      v1=e1+v[t-1][cx][nx][sx];
      if(z>50)v1=99999;
      if(v1<minv)cxs=cx;
     if(v1<minv)sxs=sx;
    if(v1<minv)nxs=nx;
     if(v1<minv)minv=v1;
      }
      }
     v[t][c][n][s]=minv;
     gotos[t][c][n][s]=sxs;
     goton[t][c][n][s]=nxs;
     gotoc[t][c][n][s]=cxs;
      }
     }
     }
     }
 
      n=12;
 
      minv=9999;
      for(s=1;s<100;s++){
      for(c=1;c<3;c++){
      if(v[datanumber][c][n][s]<minv)sx=s;
     if(v[datanumber][c][n][s]<minv)cx=c;
     if(v[datanumber][c][n][s]<minv)minv=v[datanumber][c][n][s];
     }
     }
 
      int t1;
 
      route_c[datanumber]=cx;
      route_n[datanumber]=n;
      route_s[datanumber]=sx;
 
 
     for(t=1;t<datanumber;t++){ 
     t1=datanumber+1-t; 
     c=route_c[t1];
     s=route_s[t1];
     n=route_n[t1];
     route_c[t1-1]=gotoc[t1][c][n][s]; 
     route_n[t1-1]=goton[t1][c][n][s]; 
     route_s[t1-1]=gotos[t1][c][n][s]; 
     }
 
      for(t=1;t<datanumber+1;t++){
      sx=route_s[t];
      nearpoint[t]=minp+delta*sx;  
      }
 
 
 
 
 
 
 
 
 
    }
}
 
最終更新:2014年03月06日 15:22