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