📄 qq1d.cpp
字号:
#include<iostream.h>
#include<fstream.h>
void main()
{
ifstream infile("busroute1.txt");
if (!infile)
cout<<"open error"<<endl;
float data[522*2][100];
for(int p1=0;p1<522*2;p1++)
for(int q1=0;q1<100;q1++)
data[p1][q1]=0;
data[0][0]=1;//线路号
char a1,b1;
int i1=0;
int j1=1;
do
{
infile>>a1;
while(a1!='S')
infile>>a1;
while(a1=='S')
{
infile>>data[i1][j1];
j1++;
infile>>b1;
infile>>a1;
};
i1++;
j1=1;
if(a1=='E'||b1=='E')
break;
if(a1=='L'||b1=='L')
{
data[i1][0]=data[i1-1][0]+1;//路线号
// for(int r=0;r<j;r++)
// {data[i][r]=data[i-1][j-r-1];}
// i++;
continue;
}
else
{
data[i1][0]=data[i1-1][0];
int n1=0;
for(;n1<3;n1++)
{infile>>b1;}
b1='L';
}
}
while(a1=='L'||b1=='L');
//cout<<i1<<endl;
//for(int k=0;k<i;k++)// 输出
// for(int l=0;l<100;l++)
// outfile<<data[k][l]<<endl;
infile.close();
//outfile.close();
int d_data[522*2][100];
for(p1=0;p1<522*2;p1++)
for(int q1=0;q1<100;q1++)
d_data[p1][q1]=0;
int k1=0;
while(k1<i1)
{
if(data[k1][0]==data[k1+1][0])
{
for(int l=0;l<99;l++)
{
d_data[int(2*data[k1][0]-2)][l]=data[k1][l+1];
d_data[int(2*data[k1][0]-1)][l]=data[k1+1][l+1];
}
k1++;
k1++;
}
else
{
for(int l=0;l<99;l++)
d_data[int(2*data[k1][0]-2)][l]=data[k1][l+1];
int w1=1;
while(data[k1][w1]!=0)
++w1;
for(l=0;l<w1;l++)
d_data[int(2*data[k1][0]-1)][l]=data[k1][w1-l-1];
k1++;
}
}
/*for( k1=0;k1<522*2;k1++)// 输出
for(int l=0;l<100;l++)
coutfile<<d_data[k1][l]<<endl;
coutfile.close();*/
//int a[2][5]=;
//int b[2][5]={};
/*int d_data[4][10]={1,2,3,4,5,22,23,0,0,0,
10,1,11,12,13,56,78,0,0,0,
16,6,11,5,9,0,0,0,0,0,
6,7,3,8,18,0,0,0,0,0};*/
int aa,bb;
int lenth1,lenth2,lenth,minlenth=100;
//int line,ge;
int i,j,x,w=0;
int p11[100],p2[100];
ofstream coutfile("result.txt",ios::out);
if(!coutfile)
cout<<"open error!"<<endl;
cout<<"input the start point:";
cin>>aa;
cout<<"input the end point:";
cin>>bb;
//cout<<a[1]<<endl;
bool two=false;
int zhidaxian=0;
int r=0,s=0; //算出A、 B集合
int name1[80]; // 路线号
int name2[80];
int num1[80]; //站点序号
int num2[80];
for(int t=0;t<80;t++)
{
name1[t]=0;
name2[t]=0;
}
//int u[1040][100];
/*int *name1;
name1=new int[];
int *name2;
name2=new int[];*/
for(int p=0;p<1044;p++) //上行和下行路线总数
{
for(int q=0;q<100;q++) //站点序号
{
if(d_data[p][q]==aa)
{
name1[r]=p;
// cout<<"q="<<q<<endl;
num1[r]=q;
r=r+1;
}
if(d_data[p][q]==bb)
{
name2[s]=p;
//cout<<"name2[s]"<<name2[s]<<endl;
//cout<<"p="<<p<<endl;
//cout<<"q="<<q<<endl;
//cout<<"s="<<s<<endl;
num2[s]=q;
s=s+1;
}
}
}
for(i=0;i<r;i++) //找出任意A B 集合中两个数组
{
//cout<<"there"<<endl;
//cout<<"i="<<i<<endl;
for(j=0;j<s;j++)
{
//cout<<"here"<<endl;
//cout<<"j="<<j<<endl;
for(int z=0;z<100;z++) //取出任意2条线
{
//cout<<"z="<<z<<endl;
//cout<<"qiu"<<endl;
//cout<<"ok!"<<endl;
p11[z]=d_data[name1[i]][z];
//cout<<a[i][k]<<endl;
//cout<<"name2[j]="<<name2[j]<<endl;
p2[z]=d_data[name2[j]][z];
//cout<<" * "<<u[name2[j]][z];
}
if(name1[i]==name2[j]&&num1[i]<=num2[j])
{
zhidaxian=name1[i];
cout<<name1[i]<<"="<<name2[j]<<endl;
cout<<num1[i]<<"to"<<num2[j]<<endl;
lenth=num2[j]-num1[i];
coutfile<<"lenth="<<lenth<<"minlenth="<<minlenth<<endl;
cout<<"lenth="<<lenth<<"minlenth="<<minlenth<<endl;
if(lenth<minlenth)
{
minlenth=lenth;
}
coutfile<<name1[i]/2+1<<"路车:";
cout<<name1[i]/2+1<<"路车:";
for(int d=num1[i];d<=num2[j];d++)
{
coutfile<<d_data[name1[i]] [d]<<"->";
cout<<d_data[name1[i]] [d]<<"->";
}
coutfile<<"end(直达)"<<endl;
cout<<"end(直达d)"<<endl;
}
else
{
//cout<<"hehe"<<endl;
//cout<<"num1[i]="<<num1[i]<<endl;
//cout<<"num2[j]="<<num2[j]<<endl;
for(int m=num1[i]+1;m<100;m++) //找出公共站点
{
for(int n=0;n<num2[j];n++)
{
if(p11[m]==p2[n])
{
//cout<<"%%%%%%%%%%%%%%%%%%"<<name1[i]<<endl;
//cout<<p2[n]<<endl;
//cout<<"n="<<n<<endl;
lenth1=m-num1[i]; //计算第一段长度
lenth2=num2[j]-n; // 计算第二段长度
lenth=lenth1+lenth2;
for(x=num1[i];x<=m;x++)
{
//cout<<x<<"!"<<end;
//coutfile<<p11[x]<<"->";
//cout<<p11[x]<<"->";
if(p11[x]==p2[num2[j]])
two=true;
}
if(lenth<=minlenth)
{
coutfile<<"lenth="<<lenth<<endl;
cout<<"lenth*="<<lenth<<"<"<<"minlenth="<<minlenth<<endl;
minlenth=lenth;
coutfile<<name1[i]/2+1<<"路车:";
cout<<name1[i]/2+1<<"路车&:";
for(x=num1[i];x<=m;x++) //输出路线
{
//cout<<x<<"!"<<end;
coutfile<<p11[x]<<"->";
cout<<p11[x]<<"->";
}
coutfile<<"(转 "<<name2[j]/2+1<<"路车:) ";
cout<<"(转 "<<name2[j]/2+1<<"路车*:) ";
for(x=n;x<=num2[j];x++)
{
//cout<<"j="<<j<<endl;
//cout<<name2[j]<<"!"<<endl;
cout<<p2[x]<<"->";
coutfile<<p2[x]<<"->";
}
coutfile<<"end"<<endl;
cout<<"end"<<endl;
}
}
}
}
}
}
}
coutfile.close();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -