package line3;
import tool.*;
import java.util.HashMap;
public class pro {
int s,datanumber,sx;
String[] data=new String[50000];
String[] line=new String[50000];
String[] sta=new String[50000];
String[] com=new String[50000];
String[] geo=new String[50000];
int dicnumber;
String[] dic_com=new String[50000];
String[] dic_line=new String[50000];
String[] dic_geo=new String[50000];
int[] code=new int[50000];
int number_geo;
int[] a_line=new int[600000];
int[] b_line=new int[600000];
int[] d_line=new int[600000];
int number_line;
int[][] chx=new int[1000][10000];
HashMap<String,Integer> map = new HashMap<String,Integer>();
public static void main(String[] args) {
pro t=new pro();
}
pro(){
readfile sub=new readfile();
sub.makedata("linec.txt","UTF-8");
data=sub.data;
datanumber=sub.datanumber;
for(s=1;s<datanumber+1;s++){
catchword sub8=new catchword();
sta[s]=sub8.makedata(data[s],"station");
line[s]=sub8.makedata(data[s],"line");
com[s]=sub8.makedata(data[s],"com");
geo[s]=sub8.makedata(data[s],"geo");
}
dicnumber=0;
int h,cc;
for(s=1;s<datanumber+1;s++){
cc=0;
for(sx=1;sx<dicnumber+1;sx++){
h=0;
if(com[s].equals(dic_com[sx]))h=h+1;
if(line[s].equals(dic_line[sx]))h=h+1;
if(h==2)cc=100;
}
if(cc<50)dicnumber=dicnumber+1;
if(cc<50)dic_line[dicnumber]=line[s];
if(cc<50)dic_com[dicnumber]=com[s];
}
for(s=1;s<dicnumber+1;s++){
System.out.println(s+","+dic_com[s]+","+dic_line[s]);
}
for(s=1;s<datanumber+1;s++){
for(sx=1;sx<dicnumber+1;sx++){
h=0;
if(com[s].equals(dic_com[sx]))h=h+1;
if(line[s].equals(dic_line[sx]))h=h+1;
if(h==2)code[s]=sx;
}
}
number_geo=0;
for(s=1;s<datanumber+1;s++){
cc=0;
for(sx=1;sx<number_geo+1;sx++){
if(geo[s].equals(dic_geo[sx]))cc=100;
}
if(cc<50)number_geo=number_geo+1;
if(cc<50)dic_geo[number_geo]=geo[s];
}
for(sx=1;sx<number_geo+1;sx++){
map.put(dic_geo[sx], sx);
}
System.out.println(dicnumber);
int s1,s2;
for(s=1;s<dicnumber+1;s++){
for(sx=1;sx<number_geo+1;sx++){
chx[s][sx]=0;
}}
for(s=1;s<datanumber+1;s++){
s1=code[s];
s2=map.get(geo[s]);
chx[s1][s2]=100;
}
int tx,n;
n=0;
for(s=1;s<dicnumber;s++){
for(sx=s+1;sx<dicnumber+1;sx++){
cc=0;
for(tx=1;tx<number_geo+1;tx++){
h=0;
if(chx[s][tx]>60)h=h+1;
if(chx[sx][tx]>60)h=h+1;
if(h==2)cc=100;
}
if(cc>50)n=n+1;
if(cc>50)a_line[n]=s;
if(cc>50)b_line[n]=sx;
if(cc>50)d_line[n]=1;
}}
number_line=n;
int tr;
for(tr=1;tr<1001;tr++){
trip sub2=new trip();
sub2.number=dicnumber;
sub2.number_line=number_line;
sub2.a_line=a_line;
sub2.b_line=b_line;
sub2.d_line=d_line;
sub2.makedata();
number_line=sub2.number_line;
a_line=sub2.a_line;
b_line=sub2.b_line;
d_line=sub2.d_line;
}
sx=check_line(537,548);
System.out.println(sx+","+d_line[sx]);
}
int check_line(int s1,int s2){
int sx,h,ch;
ch=0;
for(sx=1;sx<number_line+1;sx++){
h=0;
if(a_line[sx]==s1)h=h+1;
if(b_line[sx]==s2)h=h+1;
if(h==2)ch=sx;
}
for(sx=1;sx<number_line+1;sx++){
h=0;
if(b_line[sx]==s1)h=h+1;
if(a_line[sx]==s2)h=h+1;
if(h==2)ch=sx;
}
return ch;
}
}
package line3;
public class trip {
int number_line;
int[] a_line=new int[10001];
int[] b_line=new int[10001];
int[] d_line=new int[10001];
int number;
int number_trip;
int[] trip=new int[100001];
void makedata(){
gototrip();
int s1,s2;
for(s1=1;s1<number_trip;s1++){
for(s2=s1+1;s2<number_trip+1;s2++){
int p=check_line(s1,s2);
if(p>0)number_line=number_line+1;
if(p>0)a_line[number_line]=trip[s1];
if(p>0)b_line[number_line]=trip[s2];
if(p>0)d_line[number_line]=met_line(s1,s2);
}
}
for(s1=1;s1<number_trip;s1++){
for(s2=s1+1;s2<number_trip+1;s2++){
int p=check_line(s1,s2);
int d21=99999;
if(p>50)d21=met_line(s1,s2);
int d22=0;
if(p>50)d22=d_line[p];
if(d22>d21)d_line[p]=d21;
}
}
}
int check_line(int s1,int s2){
int t1=trip[s1];
int t2=trip[s2];
int sx,h,chx;
chx=0;
for(sx=1;sx<number_line+1;sx++){
h=0;
if(a_line[sx]==t1)h=h+1;
if(b_line[sx]==t2)h=h+1;
if(h==2)chx=sx;
}
for(sx=1;sx<number_line+1;sx++){
h=0;
if(b_line[sx]==t1)h=h+1;
if(a_line[sx]==t2)h=h+1;
if(h==2)chx=sx;
}
return chx;
}
int met_line(int s1,int s2){
int m1,d2;
m1=0;
int t1,t2,s;
d2=0;
for(s=s1;s<s2;s++){
t1=trip[s];
t2=trip[s+1];
int mm=check_line(t1,t2);
d2=d_line[mm]+d2;
}
return d2;
}
void gototrip(){
int m=fast();
number_trip=1;
trip[1]=m;
int mode=0;
while(mode<50){
int m1=search(trip[number_trip]);
int ch=check(m1);
if(ch>50)mode=100;
if(ch<50)number_trip=number_trip+1;
if(ch<50)trip[number_trip]=m1;
}
}
int check(int delta){
int s,ch;
ch=0;
for(s=1;s<number_trip+1;s++){
if(trip[s]==delta)ch=100;
}
if(delta==0)ch=100;
return ch;
}
int search(int delta){
int sx,h,s;
int[] z=new int[9000];
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);
z[0]=0;
return z[m2];
}
int fast(){
double n1=number*Math.random();
int n2=(int)(Math.floor(n1))+1;
return n2;
}
}
最終更新:2015年05月06日 14:32