📄 airport.cpp
字号:
// Airport.cpp: implementation of the Airport class.
//
//////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "AirportDep.h"
#include "Airport.h"
#include "Externs.h" //包含全局变量
#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
Airport::Airport()
{
Airport_Arr.erase(Airport_Arr.begin(),Airport_Arr.end());
Airport_Dep.erase(Airport_Dep.begin(),Airport_Dep.end());
flightArr.erase(flightArr.begin(),flightArr.end());
flightDep.erase(flightDep.begin(),flightDep.end());
for(int t=0;t<T;t++)
{
Airport_ArrFlight[t].erase(Airport_ArrFlight[t].begin(),Airport_ArrFlight[t].end());
Airport_DepFlight[t].erase(Airport_DepFlight[t].begin(),Airport_DepFlight[t].end());
}
DelayTime_Dep=0; //机场航班总的出发延误时间段数
DelayTime_Arr=0; //机场航班总的到达延误时间段数
DelayTime=0; //机场航班总的延误时间段数
DelayFlight_Dep=0;
DelayFlight_Arr=0;
DelayFlight=0;
optDone=false;
}
Airport::~Airport()
{
}
void Airport::SetFlightArr(bool f) //生成到达航班信息
{
int rand1,rand2;
Flight temp,ff;
flightArr.erase(flightArr.begin(),flightArr.end());
for(int i=0;i<flight_ArrNumber;i++)
{
ff=Flight_Arr[i];
flightArr.push_back(ff);
}
if(f)
for(int j=0;j<(flight_ArrNumber*2);j++)
{
rand1=rand()%(flight_ArrNumber);
rand2=rand()%(flight_ArrNumber);
temp=flightArr[rand1];
flightArr[rand1]=flightArr[rand2];
flightArr[rand2]=temp;
}
}
void Airport::SetFlightArr(vector<Flight> f_arr) //根据已知到达航班生成到达航班信息
{
flightArr.erase(flightArr.begin(),flightArr.end());
for(int i=0;i<flight_ArrNumber;i++)
flightArr.push_back(f_arr[i]);
}
void Airport::SetFlightDep(bool f) //生成出发航班信息
{
int rand1,rand2;
Flight temp,ff;
flightDep.erase(flightDep.begin(),flightDep.end());
for(int i=0;i<flight_DepNumber;i++)
{
ff=Flight_Dep[i];
flightDep.push_back(ff);
}
if(f)
for(int j=0;j<(flight_DepNumber*2);j++)
{
rand1=rand()%(flight_DepNumber);
rand2=rand()%(flight_DepNumber);
temp=flightDep[rand1];
flightDep[rand1]=flightDep[rand2];
flightDep[rand2]=temp;
}
}
void Airport::SetFlightDep(vector<Flight> f_dep) //根据已知出发航班生成出发航班信息
{
flightDep.erase(flightDep.begin(),flightDep.end());
for(int i=0;i<flight_DepNumber;i++)
flightDep.push_back(f_dep[i]);
}
void Airport::InitialAirport(bool f) //随机产生机场在各个时间段的容量
{
int rand1,rand2,temp;
Airport_Arr.erase(Airport_Arr.begin(),Airport_Arr.end());
Airport_Dep.erase(Airport_Dep.begin(),Airport_Dep.end());
for(int i=0;i<T;i++)
{
rand1=rand()%4;
rand1+=6;
Airport_Arr.push_back(rand1);
}
if(f)
{
for(int j=0;j<T*2;j++)
{
rand1=rand()%(T);
rand2=rand()%(T);
temp=Airport_Arr[rand1];
Airport_Arr[rand1]=Airport_Arr[rand2];
Airport_Arr[rand2]=temp;
}
}
for(i=0;i<T;i++)
{
switch(Airport_Arr[i])
{
case 6: Airport_Dep.push_back(10);
break;
case 7: Airport_Dep.push_back(9);
break;
case 8: Airport_Dep.push_back(8);
break;
case 9: Airport_Dep.push_back(6);
break;
default: Airport_Dep.push_back(10);
}
}
}
void Airport::SetAirport_Dep(int t) //设置机场某时间段的出发容量
{
switch(Airport_Arr[t])
{
case 6: Airport_Dep[t]=10;
break;
case 7: Airport_Dep[t]=9;
break;
case 8: Airport_Dep[t]=8;
break;
case 9: Airport_Dep[t]=6;
break;
default: Airport_Dep[t]=10;
}
}
void Airport::SetAirport_Arr(int t,int flightCount) //设置机场某时间段的到达容量
{
/* if(flightCount<=6)
{
Airport_Arr[t]=6;
}
else */
Airport_Arr[t]=flightCount;
}
void Airport::SetAirport_ArrFlight() //设置机场在各个时间段的到达航班
{
int num,j,t_plan,t_real,t_delay;
bool full;
for(int t=0;t<T;t++)
Airport_ArrFlight[t].erase(Airport_ArrFlight[t].begin(),Airport_ArrFlight[t].end());
for(t=0;t<T;t++) //各时间段
{
num=0; j=0; full=false;
//使到达航班放入合适的到达航班容器中
do
{
t_plan=flightArr[j].Get_Flight_Plan();
t_real=flightArr[j].Get_Flight_Real();
t_delay=flightArr[j].Get_Flight_DelayTime();
if((t_real<0)&&(t_plan+t_delay==(t+1))) //考虑航班允许的最大延误时间
{
Airport_ArrFlight[t].push_back(flightArr[j]);
flightArr[j].Set_Flight_Real(t+1);
if(t_plan<(t+1))
flightArr[j].Set_Flight_Delay();
num++;
if(num==Airport_Arr[t])
full=true;
}
j++;
}while((j<flight_ArrNumber)&&(!full));
if(!full)
{
j=0;
do
{
t_plan=flightArr[j].Get_Flight_Plan();
t_real=flightArr[j].Get_Flight_Real();
//t_delay=flightArr[j].Get_Flight_DelayTime();
if((t_real<0)&&(t_plan==(t+1)))
{
Airport_ArrFlight[t].push_back(flightArr[j]);
flightArr[j].Set_Flight_Real(t+1);
num++;
if(num==Airport_Arr[t])
full=true;
}
j++;
}while((j<flight_ArrNumber)&&(!full));
}
if(!full)
{ //尽量使该时间段的到达航班数达到该时间段的到达容量
j=0;
do
{
t_plan=flightArr[j].Get_Flight_Plan();
t_real=flightArr[j].Get_Flight_Real();
if((t_real<0) && (t_plan<(t+1)))
{
Airport_ArrFlight[t].push_back(flightArr[j]);
flightArr[j].Set_Flight_Real(t+1);
flightArr[j].Set_Flight_Delay();
num++;
if(num==Airport_Arr[t])
full=true;
}
j++;
}while((j<flight_ArrNumber)&&(!full));
}
/* if(!full) //使到达和出发相关
{
SetAirport_Arr(t,num); //设置t时间段的到达容量
SetAirport_Dep(t); //设置t时间段的出发容量
} */
/* if(!full) //到达和出发不相关时
{ //尽量使该时间段的到达航班数达到该时间段的到达容量
j=0;
do
{
t_real=flightArr[j].Get_Flight_Real();
t_plan=flightArr[j].Get_Flight_Plan();
if(t_real<0)
{
Airport_ArrFlight[t].push_back(flightArr[j]);
flightArr[j].Set_Flight_Real(t+1);
if(t_plan<(t+1))
flightArr[j].Set_Flight_Delay();
num++;
if(num==Airport_Arr[t])
full=true;
}
j++;
}while((j<flight_ArrNumber)&&(!full));
} */
}
}
void Airport::GetAirport_ArrFlight(int t) //获得机场在t时间段的到达航班
{
Flight ff;
vector<Flight>::iterator pos;
for(pos=Airport_ArrFlight[t].begin();pos!=Airport_ArrFlight[t].end();pos++)
{
ff=*pos;
cout<<ff.Get_Flight_Num()<<endl;
}
}
void Airport::SetAirport_DepFlight() //设置机场在各个时间段的出发航班
{
int num,j,t_plan,t_real,t_delay;
bool full;
for(int t=0;t<T;t++)
Airport_DepFlight[t].erase(Airport_DepFlight[t].begin(),Airport_DepFlight[t].end());
for(t=0;t<T;t++) //各时间段
{
num=0; j=0; full=false;
//使出发航班放入合适的出发航班容器中
do
{
t_plan=flightDep[j].Get_Flight_Plan();
t_real=flightDep[j].Get_Flight_Real();
t_delay=flightDep[j].Get_Flight_DelayTime();
if((t_real<0) && (t_plan+t_delay==(t+1))) //考虑航班允许的最大延误时间段
{
Airport_DepFlight[t].push_back(flightDep[j]);
flightDep[j].Set_Flight_Real(t+1);
if(t_plan<(t+1))
flightDep[j].Set_Flight_Delay();
num++;
if(num==Airport_Dep[t])
full=true;
}
j++;
}while((j<flight_DepNumber)&&(!full));
if(!full)
{
j=0;
do
{
t_plan=flightDep[j].Get_Flight_Plan();
t_real=flightDep[j].Get_Flight_Real();
if((t_real<0)&&(t_plan==(t+1)))
{
Airport_DepFlight[t].push_back(flightDep[j]);
flightDep[j].Set_Flight_Real(t+1);
num++;
if(num==Airport_Dep[t])
full=true;
}
j++;
}while((j<flight_DepNumber)&&(!full));
}
if(!full)
{ //尽量使该时间段的出发航班数达到该时间段的出发容量
j=0;
do
{
t_plan=flightDep[j].Get_Flight_Plan();
t_real=flightDep[j].Get_Flight_Real();
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -