您的位置:首页 > 其它

2007数学建模B题算法与实现源程序

2007-10-28 23:02 489 查看
求解从起点到终点最大换乘次数为的最优线路的基本步骤如下:
步骤(1): 如果起点 和 终点在同一条线路上,求出起点到 终点的局部最优解,,并与最优解比较,更新最优解。
步骤(2): 分别找出所有的经过 起点和 终点的线路的两个集合 L1和L2 ,遍历其站点交集中每个站点p ,分别对起点 到p 和 p到 终点调用步骤(1),连接两者返回的结果得到局部最优解,并与最优解比较,做出取舍,更新最优解。
步骤(3): 对 L1集合中每条线路上的每个站 p,分别对起点 到p 调用步骤(1),对 p到终点 调用步骤(2),连接返回值得到局部最优解,并与最优解比较,更新最优解。
步骤(N ): 对 L1集合中每条线路上的每个点 p,对 起点到p 调用步骤(1),对 p到 终点调用步骤(N-1 ), 连接两者返回值得到局部最优解,并与最优解比较,更新最优解。
在算法编程实现时,通过使用哈希表和以空间复杂度换取时间复杂度的办法以优化算法.

源程序


//Cbus.h


#include<fstream>


#include<vector>


using namespace std;


extern int Station[3958];


struct Cost




...{


int bus;


int station;


int cost;


int time;


};


struct SmallCost




...{


int cost;


int time;


};


struct DotLine




...{


int station;


vector<int>bus;


};


extern vector<DotLine> Bus_train;


ostream &operator<<(ostream &fcout,Cost &cost);


class Bus




...{


public:


int m_num;


int m_cost;


int m_station[150];


int m_flag;


Bus();


int isexist(int p);


void rdouble(istream &fcin);


void rsingle(istream &fcin);


int getother(int p);


void Result(int p1,int p2,vector<Cost> &Rt,vector<Cost> &Rc,SmallCost &ti,SmallCost &co );


};


class Result




...{


public:


Bus m_bus[520];


void subway(int p1,int p2,vector<Cost> &Rt,vector<Cost> &Rc,


SmallCost &ti,SmallCost &co);


int getmaxs();


Result();


void getResult(int p1,int p2,vector<Cost> &Rt,vector<Cost> &Rc,


SmallCost &ti,SmallCost &co);


void getResult1(int p1,int p2,vector<int> line1,vector<int> line2,


vector<Cost> &Rt,vector<Cost> &Rc,SmallCost &ti,SmallCost &co);


void getResult2(int p1,int p2,vector<int> line1,vector<int> line2,


vector<Cost> &Rt,vector<Cost> &Rc,SmallCost &ti,SmallCost &co);


vector<DotLine> getDotline(const Bus &b);


};


vector<int> hash_cross(const Bus &b1,const Bus &b2);


vector<int> hash_cross(const Bus &b);




//bus.cpp


#include<iostream>


#include"Cbus.h"


#include<math.h>


using namespace std;


extern vector<DotLine> Bus_train;


Bus::Bus()




...{


this->m_num=0;


this->m_cost=0;


this->m_flag=0;


}


void Bus::rdouble(istream &fcin)




...{


int i=1;


while(fcin>>m_station[i])




...{


if(1==m_station[i])


break;


m_station[i]=m_station[i]-10000;


i++;


}


m_station[0]=i-1;


i++;


while(fcin>>m_station[i])




...{


if(0==m_station[i])


break;


m_station[i]=m_station[i]-10000;


i++;


}


m_station[m_station[0]+1]=i-m_station[0]-2;


}


void Bus::rsingle(istream &fcin)




...{


int i=1;


if(m_flag!=2)




...{


m_station[1]=m_flag-10000;


m_flag=1;


i++;


}


while(fcin>>m_station[i])




...{


if(0==m_station[i])


break;


m_station[i]=m_station[i]-10000;


i++;


}


m_station[0]=i-1;


}




int Bus::isexist(int p)




...{


int i=0;


if(0==this->m_flag)




...{


for(i=1;i<=this->m_station[0];i++)




...{


if(p==m_station[i])


return i;


}


int temp=i+m_station[i];


i++;


for(i;i<=temp;i++)




...{


if(p==m_station[i])


return i;


}


}


else




...{


for(i=1;i<=this->m_station[0];i++)


if(p==m_station[i])


return i;


}


return 0;


}


int Bus::getother(int p)




...{


if(p>m_station[0])


return 0;


for(int i=m_station[0]+1;i<m_station[0]+m_station[m_station[0]+1]+2;i++)


if(m_station[i]==m_station[p])




...{


return i;


}


return 0;


}


void Bus::Result(int p1,int p2,vector<Cost> &Rt,vector<Cost> &Rc,SmallCost &ti,SmallCost &co)




...{




int q1,q2;


switch(m_flag)




...{


case 0:


q1=getother(p1);


q2=getother(p2);


if(p1>p2&&p2>m_station[0])


return;


if(p1>p2&&p1<m_station[0]&&q1==0&&q2==0)


return;


if( p1<p2 && ( p2<=m_station[0] || p1>=m_station[0] || (q1!=0&&q1<p2) )|| p1>p2&&q2>p1)




...{


if(p1>p2)


p2=q2;


if(q1!=0&&q1<p2)


p1=q1;


Cost c;


c.bus=m_num;


c.station=m_station[p2];


c.time=abs((p2-p1))*3;


if(m_cost)


c.cost=1;


else




...{


c.cost=(abs(p2-p1)-1)/20+1;


c.cost=c.cost>3?3:c.cost;


}


if(c.cost<co.cost||(c.cost==co.cost && (Rc.size()>1 || c.time<co.time)))




...{


Rc.clear();


Rc.push_back(c);


co.cost=c.cost;


co.time=c.time;


}


if(c.time<ti.time||(c.time==ti.time && (Rt.size()>1 || c.cost<ti.cost)))




...{


Rt.clear();


Rt.push_back(c);


ti.time=c.time;


ti.cost=c.cost;


return;


}


}


else




...{


if(p1>p2)




...{


if(p1<m_station[0])


p1=q1;


Cost c;


Cost d;


c.bus=m_num;


c.station=m_station[1];


c.time=(m_station[0]+m_station[m_station[0]+1]+1-p1)*3;


d.bus=m_num;


d.station=m_station[p2];


d.time=abs(p2-1)*3;


if(m_cost)




...{


d.cost=1;


c.cost=1;


}


else




...{


d.cost=(d.time/3-1)/20+1;


c.cost=(c.time/3-1)/20+1;


d.cost=d.cost>3?3:d.cost;


c.cost=c.cost>3?3:d.cost;


}


if(c.time+d.time+5<ti.time||(c.time+d.time+5==ti.time&&c.cost+d.cost<ti.cost))




...{


Rt.clear();


Rt.push_back(c);


Rt.push_back(d);


ti.time=c.time+d.time+5;


ti.cost=c.cost+d.cost;


}


if(c.cost+d.cost<co.cost||(c.cost+d.cost==co.cost)&&c.time+d.time+5<co.time)




...{


Rc.clear();


Rc.push_back(c);


Rc.push_back(d);


co.cost=c.cost+d.cost;


co.time=c.time+d.time+5;


}


return;


}


Cost c;


Cost d;


c.bus=m_num;


c.station=m_station[m_station[0]];


c.time=abs(m_station[0]-p1)*3;


d.bus=m_num;


d.station=m_station[p2];


d.time=abs(p2-m_station[0]-1)*3;


if(m_cost)




...{


d.cost=1;


c.cost=1;


}


else




...{


d.cost=(d.time/3-1)/20+1;


c.cost=(c.time/3-1)/20+1;


d.cost=d.cost>3?3:d.cost;


c.cost=c.cost>3?3:d.cost;


}


if(c.time+d.time+5<ti.time||(c.time+d.time+5==ti.time&&c.cost+d.cost<ti.cost))




...{


Rt.clear();


Rt.push_back(c);


Rt.push_back(d);


ti.time=c.time+d.time+5;


ti.cost=c.cost+d.cost;


}


if(c.cost+d.cost<co.cost||(c.cost+d.cost==co.cost)&&c.time+d.time+5<co.time)




...{


Rc.clear();


Rc.push_back(c);


Rc.push_back(d);


co.cost=c.cost+d.cost;


co.time=c.time+d.time+5;


}


return;


}


break;


case 1:


Cost c;


c.bus=m_num;


c.station=m_station[p2];


c.time=abs(p2-p1)*3;


if(m_cost)


c.cost=1;


else




...{


c.cost=(abs(p2-p1)-1)/20+1;


c.cost=c.cost>3?3:c.cost;


}


if(c.cost<co.cost||(c.cost==co.cost && (Rc.size()>1 || c.time<co.time)))




...{


Rc.clear();


Rc.push_back(c);


co.cost=c.cost;


co.time=c.time;


}


if(c.time<ti.time||(c.time==ti.time && (Rt.size()>1 || c.cost<ti.cost)))




...{


Rt.clear();


Rt.push_back(c);


ti.time=c.time;


ti.cost=c.cost;


return;


}


break;


case 2:


int temp=abs(p1-p2);


c.bus=m_num;


c.station=m_station[p2];


c.time=temp*3;


if(m_station[p1]==m_station[1])




...{


c.time=(p2-1<m_station[0]-p2?(p2-1)*3:abs(m_station[0]-p2)*3);


}


if(m_station[p2]==m_station[1])




...{


c.time=(p1-1<m_station[0]-p1?(p1-1)*3:abs(m_station[0]-p1)*3);


}


if(m_cost)


c.cost=1;


else




...{


c.cost=(c.time/3-1)/20+1;


c.cost=c.cost>3?3:c.cost;


}


if(c.cost<co.cost||(c.cost==co.cost && (Rc.size()>1 || c.time<co.time)))




...{


Rc.clear();


Rc.push_back(c);


co.cost=c.cost;


co.time=c.time;


}


if(c.time<ti.time||(c.time==ti.time && (Rt.size()>1 || c.cost<ti.cost)))




...{


Rt.clear();


Rt.push_back(c);


ti.time=c.time;


ti.cost=c.cost;


}


if(p1==1||p2==1)


return;


int min=p2;


Cost d;


if(p1<p2)




...{


p2=p1;


p1=min;


c.time=(p2-1)*3;


d.time=abs(m_station[0]-p1)*3;


}


else




...{


c.time=abs(m_station[0]-p1)*3;


d.time=(p2-1)*3;


}


c.station=m_station[1];


d.bus=c.bus;


d.station=m_station[min];


if(m_cost)




...{


c.cost=d.cost=1;


}


else




...{


d.cost=(d.time/3-1)/20+1;


c.cost=(c.time/3-1)/20+1;


d.cost=d.cost>3?3:d.cost;


c.cost=c.cost>3?3:d.cost;


}


if(c.time+d.time+5<ti.time||(c.time+d.time+5==ti.time&&c.cost+d.cost<ti.cost))




...{


Rt.clear();


Rt.push_back(c);


Rt.push_back(d);


ti.time=c.time+d.time+5;


ti.cost=c.cost+d.cost;


}


if(c.cost+d.cost<co.cost||(c.cost+d.cost==co.cost)&&c.time+d.time+5<co.time)




...{


Rc.clear();


Rc.push_back(c);


Rc.push_back(d);


co.cost=c.cost+d.cost;


co.time=c.time+d.time+5;


}


return;


break;


}


}


void Result::getResult(int p1,int p2,vector<Cost> &Rt,vector<Cost> &Rc,


SmallCost &ti,SmallCost &co)




...{


vector<int> line1,line2;


int flag=0,temp1=0,temp2=0;


ti.cost=ti.time=co.cost=co.time=999999999;


if(Station[p1]&&Station[p2])


subway(p1,p2,Rt,Rc,ti,co);


for(int i=0;i<520;i++)




...{


temp1=m_bus[i].isexist( p1 );


if(temp1)




...{


line1.push_back(i);


flag=1;


}


temp2=m_bus[i].isexist(p2);


if(temp2)




...{


line2.push_back(i);


if(flag==1)


m_bus[i].Result(temp1,temp2,Rt,Rc,ti,co);


}


flag=0;


}


if(Station[p1])


line1.push_back(1000);


if(Station[p2])


line2.push_back(1000);


getResult1(p1,p2,line1,line2,Rt,Rc,ti,co);


getResult2(p1,p2,line1,line2,Rt,Rc,ti,co);


}




void Result::getResult1(int p1,int p2,vector<int> line1,vector<int> line2,


vector<Cost> &Rt,vector<Cost> &Rc,SmallCost &ti,SmallCost &co)




...{


int i=0,j=0;


for(i=0;i<line1.size();i++)


for(j=0;j<line2.size();j++)




...{


if(line1.at(i)==line2.at(j))


continue;


vector<int> cross;


if(line1.at(i)<520&&line2.at(j)<520)


cross=hash_cross( m_bus[line1.at(i)], m_bus[line2.at(j)] );


else




...{


if(line1.at(i)>520)


cross=hash_cross(m_bus[line2.at(j)]);


else


cross=hash_cross(m_bus[line1.at(i)]);


}


if(cross.size()==0)


continue;


for(int k=0;k<cross.size();k++)




...{


int cro=cross.at(k);


int change_cost;


change_cost=5;




SmallCost t1=...{999999999,999999999};


SmallCost t2,c1,c2;


t2=c1=c2=t1;


vector<Cost> Rc1,Rc2,Rt1,Rt2;


int num1=line1.at(i),num2=line2.at(j);


if(num1==num2||p2==cro||p1==cro)


continue;


if(num1<520&&num2<520)




...{


m_bus[num1].Result(m_bus[num1].isexist(p1),m_bus[num1].isexist(cro),


Rt1,Rc1,t1,c1);


m_bus[num2].Result(m_bus[num2].isexist(cro),m_bus[num2].isexist(p2),


Rt2,Rc2,t2,c2);


change_cost=5;


}


if(num1==1000)




...{


change_cost=7;


subway(p1,cro,Rt1,Rc1,t1,c1);


m_bus[num2].Result(m_bus[num2].isexist(cro),m_bus[num2].isexist(p2),


Rt2,Rc2,t2,c2);


if(Rt1.at(0).bus<0)


change_cost=3;


}


if(num2==1000)




...{


m_bus[num1].Result(m_bus[num1].isexist(p1),m_bus[num1].isexist(cro),


Rt1,Rc1,t1,c1);


subway(cro,p2,Rt2,Rc2,t2,c2);


change_cost=6;


if(Rt2.at(0).bus<0)


change_cost=0;


}


if(t1.time==12)




...{


t1.time=12;


}


if(t1.time+t2.time+change_cost<ti.time||((t1.time+t2.time+change_cost==ti.time)&&t1.cost+t2.cost<ti.cost))




...{


int n=0;


Rt.clear();


for(n=0;n<Rt1.size();n++)


Rt.push_back(Rt1.at(n));


for(n=0;n<Rt2.size();n++)


Rt.push_back(Rt2.at(n));


ti.cost=t1.cost+t2.cost;


ti.time=t1.time+t2.time+change_cost;


}


if(c1.cost+c2.cost<co.cost||((c1.cost+c2.cost==co.cost)&&c1.time+c2.time+change_cost<co.time))




...{


int n=0;


Rc.clear();


for(n=0;n<Rc1.size();n++)


Rc.push_back(Rc1.at(n));


for(n=0;n<Rc2.size();n++)


Rc.push_back(Rc2.at(n));


co.cost=c1.cost+c2.cost;


co.time=c1.time+c2.time+change_cost;


}


Rc1.clear();


Rc2.clear();


Rt1.clear();


Rt2.clear();


t1.cost=t2.cost=c1.cost=c2.cost=999999999;


t1.time=t2.time=c1.time=c2.time=999999999;


}


}


}


void Result::getResult2(int p1,int p2,vector<int> line1,vector<int> line2,


vector<Cost> &Rt,vector<Cost> &Rc,SmallCost &ti,SmallCost &co)




...{


int i=0,j=0;


for(i=0;i<line1.size();i++)




...{


vector<DotLine>Dot;


if(line1.at(i)==1000)


Dot=Bus_train;


else


Dot=getDotline(m_bus[line1.at(i)]);


for(j=0;j<Dot.size();j++)




...{


int change_cost1,change_cost2;


change_cost1=change_cost2=5;


int dot;


dot=Dot.at(j).station;


int num=line1.at(i);


if(p1==dot||p2==dot)


continue;




SmallCost t1=...{999999999,999999999};


SmallCost t2,c1,c2;


t2=c1=c2=t1;


vector<Cost> Rc1,Rc2,Rt1,Rt2;


if(num==1000)




...{


subway(p1,dot,Rt1,Rc1,t1,c1);


change_cost1=change_cost2=7;


}


else


m_bus[num].Result(m_bus[num].isexist(p1),


m_bus[num].isexist(dot),Rt1,Rc1,t1,c1);


getResult1(dot,p2,Dot.at(j).bus,line2,Rt2,Rc2,t2,c2);


if(Rt1.size()>0&&Rt1.at(0).bus<0)


change_cost1=3;


if(Rt2.size()>0&&Rt2.at(0).bus>=1000)


change_cost1=6;


if(Rc1.size()>0&&Rc1.at(0).bus<0)


change_cost2=3;


if(Rc2.size()>0&&Rc2.at(0).bus>=1000)


change_cost2=6;


if((t1.time+t2.time+change_cost1<ti.time||((t1.time+t2.time+change_cost1==ti.time)&&t1.cost+t2.cost<ti.cost))&&t2.cost<99999999)




...{


int n=0;


Rt.clear();


for(n=0;n<Rt1.size();n++)


Rt.push_back(Rt1.at(n));


for(n=0;n<Rt2.size();n++)


Rt.push_back(Rt2.at(n));


ti.cost=t1.cost+t2.cost;


ti.time=t1.time+t2.time+change_cost1;


}


if((c1.cost+c2.cost<co.cost||((c1.cost+c2.cost==co.cost)&&c1.time+c2.time+change_cost2<co.time))&&c2.cost<99999999)




...{


int n=0;


Rc.clear();


for(n=0;n<Rc1.size();n++)


Rc.push_back(Rc1.at(n));


for(n=0;n<Rc2.size();n++)


Rc.push_back(Rc2.at(n));


co.cost=c1.cost+c2.cost;


co.time=c1.time+c2.time+change_cost2;


}


Rc1.clear();


Rc2.clear();


Rt1.clear();


Rt2.clear();


t1.cost=t2.cost=c1.cost=c2.cost=999999999;


t1.time=t2.time=c1.time=c2.time=999999999;


}


}


}




vector<DotLine> Result::getDotline(const Bus &b)




...{


vector<DotLine>Dot;


int i=1;


for(i=1;i<=b.m_station[0];i++)




...{


DotLine dl;


dl.station=b.m_station[i];


for(int j=0;j<520;j++)




...{


if( m_bus[j].isexist(b.m_station[i]) )


dl.bus.push_back(j);


}


Dot.push_back(dl);


}


if(b.m_flag==0)




...{


for(i=b.m_station[0]+1;i<b.m_station[0]+b.m_station[b.m_station[0]+1]+2;i++)




...{


DotLine dl;


dl.station=b.m_station[i];


for(int j=0;j<520;j++)




...{


if( m_bus[i].isexist(b.m_station[i]) )


dl.bus.push_back(i);


}


Dot.push_back(dl);


}


}


return Dot;


}


SmallCost get_SmallCost(vector<Cost> &V)




...{


SmallCost cost;


if(V.size()!=0)




...{


cost.cost=V.at(0).cost;


cost.time=V.at(0).time;


}


for(int i=1;i<V.size();i++)




...{


cost.time=cost.time+V.at(i).time+5;


cost.cost=cost.cost+V.at(i).cost;


}


return cost;


}


vector<int> hash_cross(const Bus &b)




...{


vector<int> cross;


int i=1;


for(i=1;i<=b.m_station[0];i++)




...{


if(Station[b.m_station[i]])


cross.push_back(b.m_station[i]);


}


if(b.m_flag==0)




...{


for(i=b.m_station[0]+2;i<b.m_station[0]+b.m_station[b.m_station[0]+1]+2;i++)


if(Station[b.m_station[i]])




...{


for(int k=0;k<cross.size();k++)




...{


if(cross.at(k)==b.m_station[i])


break;


}


if(k==cross.size())


cross.push_back(b.m_station[i]);


}


}


return cross;


}


vector<int> hash_cross(const Bus &b1,const Bus &b2)




...{


vector<int> cross;




bool hash[3957]=...{0};


int i=0;


for(i=1;i<=b1.m_station[0];i++)


hash[b1.m_station[i]]=1;


if(b1.m_flag==0)


for(i=b1.m_station[0]+2;i<b1.m_station[0]+b1.m_station[b1.m_station[0]+1]+2;i++)


hash[b1.m_station[i]]=1;


for(i=1;i<=b2.m_station[0];i++)




...{


if(hash[b2.m_station[i]])




...{


for(int k=0;k<cross.size();k++)




...{


if(cross.at(k)==b2.m_station[i])


break;


}


if(k==cross.size())


cross.push_back(b2.m_station[i]);


}


}


if(b2.m_flag==0)




...{


for(i=b2.m_station[0]+2;i<b2.m_station[0]+b2.m_station[b2.m_station[0]+1]+2;i++)




...{


if(hash[b2.m_station[i]])




...{


int k=0;


for(k=0;k<cross.size();k++)




...{


if(cross.at(k)==b2.m_station[i])


break;


}


if(k==cross.size())


cross.push_back(b2.m_station[i]);


}


}


}


return cross;


}


istream &operator>>(istream &fcin,Bus &bus)




...{


fcin>>bus.m_num;


fcin>>bus.m_cost;


fcin>>bus.m_flag;


if(bus.m_flag==0)


bus.rdouble(fcin);


else


bus.rsingle(fcin);


return fcin;


}




ostream &operator<<(ostream &fcout,Cost &cost)




...{


fcout<<cost.bus<<" "<<cost.station<<" "<<cost.cost<<" "<<cost.time<<endl;


return fcout;


}


Result::Result()




...{


ifstream file("L.txt");


if(!file)




...{


cout<<"文件打开失败"<<endl;


return;


}


for(int i=0;i<520;i++)


file>>m_bus[i];


file.close();


file.open("D.txt");


if(!file)




...{


cout<<"文件打开失败"<<endl;


return;


}


int num=0,data=0;


file>>num;


while(file>>data)




...{


if(data==0)




...{


file>>num;


continue;


}


Station[data]=num;


}




}




int Result::getmaxs()




...{


int max=0;


for(int i=0;i<520;i++)




...{


int n=0;


if(m_bus[i].m_flag==0)


n=m_bus[i].m_station[0]+m_bus[i].m_station[m_bus[i].m_station[0]+1]+1;


else


n=m_bus[i].m_station[0];


for(int j=0;j<n;j++)


if(max<m_bus[i].m_station[j])


max=m_bus[i].m_station[j];


}


return max;


}




void Result::subway(int p1,int p2,vector<Cost> &Rt,vector<Cost> &Rc,


SmallCost &ti,SmallCost &co)




...{


Rt.clear();


Rc.clear();


Cost cost;


int save=p2;


if(Station[p1]==0&&Station[p2]==0)


return;


p1=Station[p1];


p2=Station[p2];


if(p1==p2)




...{


cost.bus=-p1;


cost.cost=0;


cost.time=8;


cost.station=save;


Rt.push_back(cost);


Rc.push_back(cost);


ti.cost=co.cost=0;


ti.time=co.time=8;


return;


}


if( (p1<24&&p2<24) || (p1>23&&p2>23) ||p1==12


|| p2==12 || p1==18 || p2==18)




...{


if(p1<24&&p2<24)




...{


cost.bus=1000;


cost.cost=3;


cost.station=p2;


cost.time=abs(p2-p1)*2.5;


Rt.push_back(cost);


Rc.push_back(cost);


ti.cost=co.cost=3;


ti.time=co.time=cost.time;


return;


}


cost.station=p2;


p1=(p1>26?p1+1:p1);


p1=(p1>33?p1+1:p1);


p2=(p2>26?p2+1:p2);


p2=(p2>33?p2+1:p2);


p1=(p1==12?27:p1);


p2=(p2==12?27:p2);


p1=(p1==18?34:p1);


p2=(p2==18?34:p2);


cost.bus=1001;


int tt=abs(p1-p2);


tt=(tt>9?tt=18-tt:tt);


cost.time=tt*2.5;


cost.cost=3;


Rt.push_back(cost);


Rc.push_back(cost);


co.cost=ti.cost=3;


co.time=ti.time=cost.time;


return;


}


else




...{


int temp1=p1,temp2=p2;


int core=0;


temp1=p1>p2?temp1:p2;


temp2=p1>p2?temp2:p1;


if(temp1<27||temp2<12)


core=12;


if(temp1>32||temp2>18)


core=18;


if(core==0)




...{


temp1=33-temp1+18;


if(temp1-temp2>=7)


core=12;


else


core=18;


}


Cost cost2;


if(p1>p2)




...{


cost.bus=1001;


cost2.bus=1000;


if(core==18)


if(p1>32)


cost.time=abs(p1-32)*2.5;


else


cost.time=abs(p1-33)*2.5;


else


if(p1>26)


cost.time=abs(p1-26)*2.5;


else


cost.time=abs(p1-27)*2.5;


cost2.time=abs(p2-core)*2.5;




}


else




...{


cost.time=abs(core-p1)*2.5;


cost.bus=1000;


cost2.bus=1001;


if(core==18)


cost2.time=(abs(p2-32.5)+0.5)*2.5;


else


cost2.time=(abs(p2-26.5)+0.5)*2.5;


}


cost.cost=3;


cost.station=core;


cost2.cost=0;


cost2.station=p2;


Rt.push_back(cost);


Rc.push_back(cost2);


ti.cost=co.cost=3;


ti.time=co.time=cost.time+cost2.time+4;


}




}




//Mbus.cpp


#include"Cbus.h"


#include<iostream>


using namespace std;




int Station[3958]=...{0};


vector<DotLine> Bus_train;


int main()




...{


vector<Cost> Rt,Rc,Rd;


Result R;


for(int i=1;i<3958;i++)


if(Station[i])




...{


DotLine dl;


dl.station=i;


for(int j=0;j<520;j++)




...{


if( R.m_bus[j].isexist(i))


dl.bus.push_back(j);


}


Bus_train.push_back(dl);


}


SmallCost time,cost,disp;


int p1,p2;


while(1)




...{


cout<<"请输入两个公交站点"<<endl;


cin>>p1;


if(p1==0)


break;


cin>>p2;


if(p1==p2)




...{


cout<<"输入有误,相同的两个站点"<<endl;


continue;


}


R.getResult(p1,p2,Rt,Rc,time,cost);


cout<<"时间最短路线"<<endl;


cout<<"车次 中转站 花费 时间(分)"<<endl;


for(int i=0;i<Rt.size();i++)




...{


cout<<Rt.at(i)<<endl;


}


if(Rt.size()==0)


cout<<"没有找到时间最短线路"<<endl;


else


cout<<"总时间:"<<time.time<<" 总费用:"<<time.cost<<endl;


cout<<"费用最少路线"<<endl;


cout<<"车次 下站 花费 时间(分)"<<endl;


for(i=0;i<Rc.size();i++)




...{


cout<<Rc.at(i)<<endl;


}


if(Rc.size()==0)


cout<<"没有找到费用最少线路"<<endl;


else


cout<<"总时间:"<<cost.time<<" 总费用:"<<cost.cost<<endl;


Rc.clear();


Rt.clear();


}


return 0;


}

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐