package line;
import java.util.HashMap;
public class pro {
int number;
int[] a_line=new int[10000];
int[] b_line=new int[10000];
int[] d_line=new int[10000];
int number_line;
int s;
HashMap<String,Integer> map = new HashMap<String,Integer>();
int[] trip=new int[100];
int number_trip;
public static void main(String[] args) {
pro test=new pro();
}
pro(){
number=100;
number_line=99;
for(s=1;s<number_line+1;s++){
a_line[s]=s;
b_line[s]=s+1;
d_line[s]=1;
String str=a_line[s]+"to"+b_line[s];
map.put(str,s);
}
int sx=number_line;
for(s=1;s<11;s++){
sx=sx+1;
a_line[sx]=10*s-9;
b_line[sx]=10*s;
d_line[sx]=2;
String str=a_line[sx]+"to"+b_line[sx];
map.put(str,sx);
}
number_line=sx;
System.out.println(map.get("2to3"));
int k;
for(k=1;k<10001;k++){
number_trip=1;
trip[1]=fast();
int mode;
mode=0;
while(mode<50){
int tr=search_trip(trip[number_trip]);
int ch=check_trip(tr);
if(ch<50)number_trip=number_trip+1;
if(ch<50)trip[number_trip]=tr;
if(ch>60)mode=100;
}
int s1,s2;
for(s1=1;s1<number_trip;s1++){
for(s2=s1+1;s2<number_trip+1;s2++){
int x1=trip[s1];
int x2=trip[s2];
int p1=point_line(x1,x2);
if(p1<1)number_line=number_line+1;
if(p1<1)a_line[number_line]=x1;
if(p1<1)b_line[number_line]=x2;
if(p1<1)d_line[number_line]=met_line(s1,s2);
String strx=x1+"to"+x2;
if(p1<1)map.put(strx, number_line);
}}
for(s1=1;s1<number_trip;s1++){
for(s2=s1+1;s2<number_trip+1;s2++){
int x1=trip[s1];
int x2=trip[s2];
int p1=point_line(x1,x2);
int d1=d_line[p1];
int d2=met_line(s1,s2);
if(d1>d2)d_line[p1]=d2;
}}
}
s=point_line(7,10);
System.out.println(s+","+d_line[s]);
}
int met_line(int s1,int s2){
int m1,d2;
int s;
d2=0;
for(s=s1;s<s2;s++){
m1=point_line(trip[s],trip[s+1]);
d2=d_line[m1]+d2;
}
return d2;
}
int point_line(int x1,int x2){
String str=x1+"to"+x2;
int px=0;
if(map.containsKey(str))px=map.get(str);
str=x2+"to"+x1;
if(map.containsKey(str))px=map.get(str);
return px;
}
int check_trip(int delta){
int s,ch;
ch=0;
for(s=1;s<number_trip+1;s++){
if(trip[s]==delta)ch=100;
}
return ch;
}
int search_trip(int delta){
int sx,h,s;
int[] z=new int[5000];
s=0;
for(sx=1;sx<number_line+1;sx++){
if(a_line[sx]==delta)s=s+1;
if(a_line[sx]==delta)z[s]=b_line[sx];
}
for(sx=1;sx<number_line+1;sx++){
if(b_line[sx]==delta)s=s+1;
if(b_line[sx]==delta)z[s]=a_line[sx];
}
double m1=s*Math.random();
int m2=(int)(Math.floor(m1)+1);
return z[m2];
}
int fast(){
double n1=number*Math.random();
int n2=(int)(Math.floor(n1))+1;
return n2;
}
}
最終更新:2015年05月05日 09:49