package line8;
import tool.*;
import java.io.*;
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];
double[] lat=new double[50000];
double[] lon=new double[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;
int[][] link=new int[600][600];
int[] rank=new int[60000];
int[] route=new int[20000];
int[][] dis=new int[600][600];
int[][] delta=new int[10500][600];
int[][] sigma=new int[10500][600];
int[] number_sigma=new int[10500];
int[][] dis_sta=new int[10500][10500];
double[] don=new double[10500];
public static void main(String[] args) {
pro test=new pro();
}
pro(){
readfile sub=new readfile();
sub.makedata("ren.txt","UTF-8");
data=sub.data;
datanumber=sub.datanumber;
String str;
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");
str= sub8.makedata(data[s],"lat");
lat[s]=num(str);
str= sub8.makedata(data[s],"lon");
lon[s]=num(str);
geo[s]=geo(lat[s],lon[s]);
}
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<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)code[s]=sx;
}
}
System.out.println(dicnumber);
System.out.println(datanumber);
int tr;
for(tr=1;tr<datanumber+1;tr++){
int s1=code[tr];
for(s=1;s<datanumber+1;s++){
int s2=code[s];
if(geo[s].equals(geo[tr]))link[s1][s2]=100;
}
}
for(tr=1;tr<dicnumber+1;tr++){
for(s=1;s<dicnumber+1;s++){
dis[tr][s]=10;
}}
for(tr=1;tr<dicnumber+1;tr++){
for(s=1;s<dicnumber+1;s++){
if(link[tr][s]>50)dis[tr][s]=1;
}
}
for(tr=1;tr<dicnumber+1;tr++){
dis[tr][tr]=0;
}
int mind,d1,k;
for(k=1;k<11;k++){
for(tr=1;tr<dicnumber+1;tr++){
for(s=1;s<dicnumber+1;s++){
mind=dis[tr][s];
for(sx=1;sx<dicnumber+1;sx++){
d1=dis[tr][sx]+dis[s][sx];
if(d1<mind)mind=d1;
}
dis[tr][s]=mind;
dis[s][tr]=mind;
}
}
System.out.println(k);
}
for(s=1;s<dicnumber+1;s++){
int p1=0;
for(sx=1;sx<dicnumber+1;sx++){
p1=p1+dis[s][sx];
}
}
for(tr=1;tr<datanumber+1;tr++){
int s1=code[tr];
for(s=1;s<datanumber+1;s++){
s1=code[s];
if(geo[tr].equals(geo[s]))delta[tr][s1]=100;
}
}
for(tr=1;tr<datanumber+1;tr++){
sx=0;
for(s=1;s<dicnumber+1;s++){
if(delta[tr][s]>50)sx=sx+1;
if(delta[tr][s]>50)sigma[tr][sx]=s;
}
number_sigma[tr]=sx;
}
int s1,s2;
for(tr=1;tr<datanumber+1;tr++){
for(s=1;s<datanumber+1;s++){
mind=10;
for(s1=1;s1<number_sigma[tr]+1;s1++){
for(s2=1;s2<number_sigma[s]+1;s2++){
int p1=sigma[tr][s1];
int p2=sigma[s][s2];
if(dis[p1][p2]<mind)mind=dis[p1][p2];
}}
dis_sta[tr][s]=mind;
}}
for(tr=1;tr<datanumber+1;tr++){
int p1=0;
for(s=1;s<datanumber+1;s++){
p1=p1+dis_sta[tr][s];
}
don[tr]=(double)p1/datanumber;
}
ranking();
for(tr=1;tr<201;tr++){
sx=rank[tr];
System.out.println(com[sx]+","+line[sx]+","+sta[sx]);
}
}
void ranking(){
int r,s,sx,h;
int[] ch=new int[20001];
double maxu;
int t;
for(r=1;r<datanumber+1;r++){
t=0;
sx=0;
maxu=999;
for(s=1;s<datanumber+1;s++){
h=0;
if(don[s]<maxu)h=h+1;
if(ch[s]<50)h=h+1;
if(h==2)maxu=don[s];
if(h==2)sx=s;
}
rank[r]=sx;
ch[sx]=100;
}
}
String geo(double xs,double ys){
double x,y;
int x1,x2,x3;
int y1,y2,y3;
x=xs-100;
y=1.5*ys;
y1=(int)y;
x1=(int)x;
y=y-y1;
y=8*y;
x=x-x1;
x=8*x;
y2=(int)y;
x2=(int)x;
y=y-y2;
y=10*y;
x=x-x2;
x=10*x;
y3=(int)y;
x3=(int)x;
String str;
str=""+y1+""+x1+""+y2+""+x2+""+y3+""+x3;
return str;
}
double num(String str){
double nx;
nx=0;
try{
nx=Double.parseDouble(str);
}catch (Exception e) {}
return nx;
}
}
最終更新:2015年10月11日 21:41